题意:
非递归中序遍历。
树的先序遍历
vector
<int> preorderTraversal(TreeNode
* root
) {
stack
<TreeNode
*> s
;
vector
<int> res
;
TreeNode
*p
= root
;
while (p
|| !s
.empty()) {
while (p
) {
s
.push(p
);
p
= p
->left
;
}
if (!s
.empty()) {
p
= s
.top();
s
.pop();
p
= p
->right
;
}
}
return res
;
}
中序遍历
vector
<int> inorderTraversal(TreeNode
* root
) {
stack
<TreeNode
*> s
;
vector
<int> res
;
TreeNode
*p
= root
;
while (p
|| !s
.empty()) {
while (p
) {
s
.push(p
);
p
= p
->left
;
}
if (!s
.empty()) {
p
= s
.top();
res
.push_back(p
->val
);
s
.pop();
p
= p
->right
;
}
}
return res
;
}
后序遍历
void PostOrder(TreeNode
*root
) {
TreeNode
*p
= root
, *r
= NULL;
stack
<TreeNode
*> s
;
while (p
|| !s
.empty()) {
if (p
) {
s
.push(p
);
p
= p
->left
;
}
else {
p
= s
.top();
if (p
->right
&& p
->right
!= r
)
p
= p
->right
;
else {
s
.pop();
visit(p
->val
);
r
= p
;
p
= NULL;
}
}
}
}
转载请注明原文地址: https://www.6miu.com/read-5038342.html