二叉樹的三種遍歷 使用棧迭代進行實現

2021-10-09 17:38:35 字數 1073 閱讀 5707

前序遍歷非遞迴:

struct treenode 

treenode

(int x)

:val

(x),

left

(nullptr),

right

(nullptr

)treenode

(int x, treenode *left, treenode *right)

:val

(x),

left

(left)

,right

(right)};

vector<

int>

preorder

(treenode *root)

//左子樹遍歷完了,遍歷右子樹

cur = stk.

top();

stk.

pop();

cur = cur-

>right;

}return res;

}中序遍歷非遞迴

vector<

int>

inorder

(treenode *root)

cur = stk.

top();

stk.

pop();

res.

push

(cur-

>val)

; cur = cur-

>right;

//遍歷右子樹

}return res;

}//後序遍歷非遞迴

vector<

int>

postorder

(treenode *root)

cur = stk.

top();

//只有當乙個節點的右孩子為空或者上乙個遍歷的節點是其右孩子時才能將它加入res

if(cur-

>right ==

null

|| pre == cur-

>right)

else

}return res;

}

二叉樹的三種迭代遍歷

二叉樹的三種遍歷方式分別是前序 後序 中序。其遞迴方式比較簡單,此處用棧模擬遞迴來描述二叉樹的三種遍歷方式的迭代版本 1 前序遍歷 先到最左邊節點,一路上收集左節點到棧中,並儲存到結果集。之後不斷出棧,並對出棧結果的右節點進行如上操作 class solution cur stack.pop rig...

二叉樹的三種遍歷

重新又看了一遍二叉樹 binary tree 發現很多東西自己還沒有弄明白,原來三種遍歷方式還不是自己想象中的那樣 前序遍歷 preorder 是先輸出自己,然後左,最後右。中序遍歷 inorder 是先左,再輸出自己,最後右。後序遍歷 postorder 是先左,再右,最後輸出自己。所謂的xx遍歷...

二叉樹的三種遍歷

在這裡說一下二叉樹的三種遍歷 前序,中序,後序 正文 前序遍歷 是指先從根開始,再依次找尋左子結點 右子結點。學習時的經驗就是 看圖學習 第乙份圖 這樣看來 1.先找最基本的根結點 詞窮 這裡是a。2.接著找以a為根結點的左子結點,這裡是b。3.而以b為根結點也會出現左右結點,這就又有了乙個左結點d...