LeetCode144. Binary Tree Preorder Traversal

题目 

给定一个二叉树,返回它的 前序 遍历。

 示例:

输入: [1,null,2,3]  
   1
    \
     2
    /
   3 

输出: [1,2,3]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?


考点


思路

LeetCode94. Binary Tree Inorder Traversal


代码

1.递归

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> ret;
        preOrder(root,ret);
        return ret;        
    }

    void preOrder(TreeNode* root,vector<int> &ret)//注意用引用,不然返回不了ret
    {
        //preOrder:root->left->right
        if(!root) return;
        ret.push_back(root->val);
        preOrder(root->left,ret);
        preOrder(root->right,ret);
    }
};

 2.迭代+栈

画图,建辅助栈。

//迭代+栈
class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> ret;
        stack<TreeNode*> stack;
        TreeNode* curNode=root;

        while(curNode || !stack.empty())
        {
            while(curNode){
                stack.push(curNode);
                ret.push_back(curNode->val);
                curNode=curNode->left;
            }
            curNode=stack.top();
            curNode=curNode->right;
            stack.pop();
        }
        return ret;
    }
};

问题

posted @ 2019-02-22 00:40 lightmare 阅读(...) 评论(...) 编辑 收藏