二叉樹學習筆記

2021-10-05 06:37:08 字數 1541 閱讀 5054

二. 遞迴解法

三. 非遞迴解法

#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...

學習筆記 樹 二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。本題主要採用遞迴的思想。首先介紹一下根據前序遍歷和中序遍歷來構建二叉樹的思路 前序遍歷的第乙個則是二叉樹的根,找到根在中序遍歷中的位...