迭代法 二叉樹的中序遍歷

2021-10-08 20:08:40 字數 1318 閱讀 9801

給定乙個二叉樹,返回它的中序 遍歷。

輸入: [1,null,2,3]12

/3輸出: [1,3,2]

通過堆疊實現遞迴的過程

/**

* definition for a binary tree node.

* struct treenode

* };

*/class

solution

while

(!tree.

empty()

)}}return ans;}}

;

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的迴圈雙向鍊錶。要求不能建立任何新的節點,只能調整樹中節點指標的指向。

我們希望將這個二叉搜尋樹轉化為雙向迴圈鍊錶。鍊錶中的每個節點都有乙個前驅和後繼指標。對於雙向迴圈鍊錶,第乙個節點的前驅是最後乙個節點,最後乙個節點的後繼是第乙個節點。

下圖展示了上面的二叉搜尋樹轉化成的鍊錶。「head」 表示指向鍊錶中有最小元素的節點。

尋找中序遍歷,即為排序完畢的序列,然後在進行雙向鍊錶的操作等

/*

// definition for a node.

class node

node(int _val)

node(int _val, node* _left, node* _right)

};*/

class

solution

stack> tree;

node* head;

node* p;

node* q;

tree.

push

(root)

;while

(root-

>left)

head=tree.

top(

);

p=head;

while

(!tree.

empty()

)}p-

>right=temp;

temp-

>left=p;

p=p-

>right;

} p-

>right=head;

head-

>left=p;

return head;}}

;

迭代法求二叉樹前中後序遍歷

遞迴法求解三種遍歷方式是十分簡單的,但迭代法卻不太簡單,本文給出幾種方式和模板。節點型別 struct treenode 題目 前序遍歷是中左右的循序,根據棧的先入後出的特點,入棧的順序跟遍歷的順序相反,這樣出棧的時候就可以得到想要的順序。遞迴思路 先樹根,然後左子樹,然後右子樹。每棵子樹遞迴。在迭...

迭代法後序遍歷二叉樹 和 Morris遍曆法

首先宣告乙個棧 stack 若root有左子樹,root入棧,root root.left,直到root為空,彈出棧頂元素並將其賦值給root 若root沒有右子樹或右子樹已經被訪問,則訪問root節點,用pre記錄root,然後root賦值null 注意 只有訪問root節點時才更新pre節點 若...

二叉樹的前中後非遞迴遍歷 迭代法

利用輔助棧的方法進行迭代的前中後遍歷。前序遍歷 vectorpreorder treenode root stacks treenode curr root while s.empty curr curr s.top s.pop curr curr right return res 中序遍歷 vec...