給定乙個二叉樹,返回它的中序 遍歷。
輸入: [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...