注:
迭代法实现中序遍历,需要借助栈的先进后出结构,三种遍历的非递归写法如下:
https://blog.csdn.net/qq_38134165/article/details/79871430
题目
给定一个二叉树的根节点 root ,返回它的 中序 遍历。
题解:
递归
class Solution {
public:
vector<int> result;
void middle(TreeNode* node){
if(node==nullptr){
return ;
}
middle(node->left);
result.push_back(node->val);
middle(node->right);
return ;
}
vector<int> inorderTraversal(TreeNode* root) {
middle(root);
return result;
}
};
迭代
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*> stk;
TreeNode* node=new TreeNode;
node=root;
while(node!=nullptr||!stk.empty()){
//节点左侧所有左节点都放入栈中
while(node!=nullptr){
stk.push(node);
node=node->left;
}
//取栈中最上方节点
node=stk.top();
stk.pop();
result.push_back(node->val);
//令node=最上方节点的右节点,重新开始循环
node=node->right;
}
return result;
}
};