二叉树的遍历--迭代法

2020-09-05  本文已影响0人  const_qiu

1. 前序遍历

class Solution {
public:
    stack<TreeNode*> stack;
    vector<int> res;
    vector<int> preorderTraversal(TreeNode* root) {
        TreeNode* cur = root;
        while (!stack.empty()|| cur) {
            while (cur) {
                res.push_back(cur->val);
                stack.push(cur);
                cur = cur->left;
            }
            cur  = stack.top()
            stack.pop();
            cur = cur->right;

        }
        return res;
    }
};

2. 中序遍历

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        stack<TreeNode* > stack;
        TreeNode* cur = root;
        vector<int> res;
        while(cur || !stack.empty()){
            while(cur){
                stack.push(cur);
                cur = cur->left;
            }
            cur = stack.top();
            stack.pop();
            res.push_back(cur->val);
            cur = cur ->right;

        }
       return res;

    }
};

前序遍历和中序遍历的非递归算法,差别就是res.push_back(cur->val),语句的位置;

上一篇 下一篇

猜你喜欢

热点阅读