二叉樹的深度優先遍歷有以下三種模式:
1. 先序遍歷(vlr) – 此模式為先訪問父節點,再訪問左節點,最後訪問右節點.
2. 中序遍歷(lvr) – 此模式為先訪問左節點,再訪問父節點,最後訪問右節點. 按照中序遍歷方法訪問二叉查詢樹,得到的結果是從小到大排列有序的.
3. 後序遍歷(lrv) – 此模式為先訪問左節點,再訪問右節點,最後訪問父節點.
遍歷的思想有兩種:
遞迴 非遞迴: 非遞迴方法使用的乙個棧做為輔助資料結構. 利用棧的後進先出特點方便實現遍歷.
vlr: 先訪問,再壓棧,沒有左子樹後出棧.出棧後,轉向右子樹.
lvr: 先壓棧,沒有左子樹後出棧.出棧後,訪問,轉向右子樹.
lrv: 先壓棧,沒有左子樹後檢視棧頂元素.棧頂元素如果沒有右子樹或者棧頂元素的右子樹是剛剛訪問過的節點,則出棧.出棧後,訪問該節點.之後將該節點設定為剛剛訪問過的節點.棧頂元素如果有右子樹,並且不是剛剛訪問過的節點,則轉向右子樹.
vlr遞迴與非遞迴遍歷演算法
template
bool binsearchtree
::preorder()
else
return result;
}template
void binsearchtree
::preorder(binnode
*node)
else
return;
}template
bool binsearchtree
::preorderwithoutrecursion()
else
if (!(stackhelper->isempty()))
}if (null
!= stackhelper)
result =
true;
}return result;
}
lvr遞迴與非遞迴遍歷演算法
template
bool binsearchtree
::midorder()
else
return result;
}template
void binsearchtree
::midorder(binnode
*node)
else
return;
}template
bool binsearchtree
::midorderwithoutrecursion()
else
if (!(stackhelper->isempty()))
}if (null
!= stackhelper)
result =
true;
}return result;
}
lrv遞迴與非遞迴遍歷演算法
template
bool binsearchtree
::afterorder()
else
return result;
}template
void binsearchtree
::afterorder(binnode* node)
else
return;
}template
bool binsearchtree
::afterorderwithoutrecursion()
else
if (!(stackhelper->isempty()))
else}}
}return result;
}
二叉查詢樹 模板實現 C
二叉查詢樹 模板實現 c 1 二叉查詢樹的性質 對於樹中每個結點x,它的左子樹中所有項的值小於x中的值,而它的右子樹中所有項的值大於x中的值。2 二叉樹的操作主要是 插入,刪除,查詢。2.1 查詢 contains 實現思路 如果待查詢的項x在樹中,返回true 否則返回false。若當前比較的結點...
c 模板實現 二叉查詢樹
搗鼓了乙個晚上,最後還是照著書本把這bst弄出來了。悲催的娃娃啊,不動手寫這個還真的很難啊!1 ifndef btree h 2 define btree h 34 include 5 using std ostream 67 template 8class bstree917 bstnode tr...
C 模板實現二叉查詢樹 四 廣度優先遍歷
二叉樹的廣度優先便利遵循從上之下,從左至右的原則.實現廣度優先便利,利用了佇列 linkqueue capacity queuehelper 的先進先出的性質.先將節點入佇列,之後取出,訪問.訪問完後,將其左右子節點入佇列.依次迴圈即可.如下 template bool binsearchtree ...