題目描述:
給定一顆二叉樹,使用非遞歸方法實現(xiàn)二叉樹的中序遍歷
- 題目來源:
- http://oj.leetcode.com/problems/binary-tree-inorder-traversal/
- 題目分析:
- 遞歸到非遞歸的轉(zhuǎn)換。使用棧描述遞歸的調(diào)用過程, while循環(huán)體計算遞歸程序的計算部分 。因為每次while循環(huán)只能處理一次遞歸調(diào)用, 使用標記記錄棧中節(jié)點的計算痕跡 ,例如:用tag記錄當前根的調(diào)用記錄,當根的左右子樹均未調(diào)用時,令tag值為0,當根的左子樹已經(jīng)調(diào)用過時,令tag值為1。
- 時間復(fù)雜度: O(n) n為節(jié)點數(shù)
- 示例代碼:
vector<
int
> inorderTraversal(TreeNode *
root) {
stack
<TreeNode*>
stnode;
stack
<
char
>
sttag;
vector
<
int
>
result;
if
(root ==
NULL)
return
result;
stnode.push(root);
sttag.push(
'
0
'
);
while
(!
stnode.empty()) {
TreeNode
* topnode =
stnode.top();
char
toptag =
sttag.top();
if
(toptag ==
'
0
'
) {
sttag.pop();
sttag.push(
'
1
'
);
if
(topnode->left !=
NULL) {
stnode.push(topnode
->
left);
sttag.push(
'
0
'
);
}
}
else
if
(toptag ==
'
1
'
) {
result.push_back(topnode
->
val);
stnode.pop();
sttag.pop();
if
(topnode->right !=
NULL) {
stnode.push(topnode
->
right);
sttag.push(
'
0
'
);
}
}
}
return
result;
}
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

