二. 遞迴解法
三. 非遞迴解法
#include
using
namespace std;
char ch;
typedef
char elemtype;
typedef
struct bitnodebitnode,
*bitree;
//先序序列存入
void
createbitree
(bitree &t)
}
採用先序遍歷存入結點資訊。
遍歷順序:根結點——左子樹——右子樹
//前序遍歷二叉樹
void
preorder
(bitree t)
}
遍歷順序:左子樹——根結點——右子樹
//中序遍歷二叉樹
void
inorder
(bitree t)
}
遍歷順序:左子樹——右子樹——根結點
//後序遍歷二叉樹
void
postorder
(bitree t)
}
int
main()
採用先序遍歷存入結點資訊。
核心思路為:利用棧儲存遍歷經過的結點。
遍歷順序:根結點——左子樹——右子樹
//前序遍歷二叉樹
void
preorder
(bitree t)
//遍歷完左子樹時,若棧裡邊還有結點
//則退棧,後退到跟結點,並且向右支前進
//此時p!=null,會進入以上while迴圈if(
!s.empty()
)}}/*在 if(!s.empty())中,當獲得右支指標後,
將根結點從棧中彈出,以便返回的時候直接回到祖先結點*/
遍歷順序:左子樹——根結點——右子樹
//中序遍歷二叉樹
void
inorder
(bitree t)
//遍歷完左子樹時,若棧裡邊還有結點
//則退棧,後退到根結點,往右支前進
//此時p!=null,會進入以上while迴圈 if(
!s.empty()
)}}
遍歷順序:左子樹——右子樹——根結點
//後序遍歷二叉樹
void
postorder
(bitree t)
else
else}}
}/*使用輔助指標r,其指向最近訪問過的節點。
也可以在節點中增加乙個標誌域,記錄是否已被訪問*/
int
main()
二叉樹學習筆記
二叉樹是樹的一種特殊結構,也是一種極為重要的樹,二叉樹最重要的操作是遍歷,即按照一定的順序訪問樹中的所有節點,常見的遍歷方式有 對遍歷來說,最容易想到的方式就是遞迴,遞迴 簡單,但是效率不高,需要的棧空間比較大,非遞迴的方法 較為複雜,不過效率較高。遞迴實現 void preordervisit b...
二叉樹學習筆記
1.訪問根節點 2.在訪問第 l 層時,將 l 1 層的節點按順序儲存到佇列中 3.進入下一層並訪問該層的所有節點 4.重複上述操作直到所有層都訪問完 時間複雜度 o n 空間複雜度o n 最壞的情況下,最後一層的所有節點可能在佇列中 void levelorder node root q.dele...
學習筆記 樹 二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。本題主要採用遞迴的思想。首先介紹一下根據前序遍歷和中序遍歷來構建二叉樹的思路 前序遍歷的第乙個則是二叉樹的根,找到根在中序遍歷中的位...