binTreepreorderTraversal二叉树前序遍历

原题

Given a binary tree, return the preorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},
   1
    
     2
    /
   3
return [1,2,3].

分析

对二叉树进行先序遍历,即根节点->左子树->右子树

代码:

递归:

递归代码十分简单,建立一个vector作为返回的结果,现将根节点push进去,然后递归处理左子树和右子树.

class Solution{
public:
    std::vector<int> v;
    vector<int> preorderTraversal(TreeNode *root){
        if(root){
            v.push_back(root->val);
            preorderTraversal(root->left);
            preorderTraversal(root->right);
        }
        return v;
    }
};

可以建立一个栈,每次把根节点push进栈,然后root=root->left;直到root为空时,再从栈里获取top()->right,然后重复上面的动作

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> res;
        if(root == NULL) return res;
        stack<TreeNode*> st;
        TreeNode* node = root;

        while(node || !st.empty()){
            if(node){
                //遍历根节点和左子树并入栈
                res.push_back(node->val);
                st.push(node);
                node = node->left;
            }//直到结点为空,换成上一个结点的右子树,再按照上面的顺序遍历
            else{
                node = st.top()->right;
                st.pop();
            }
        }
        return res;
    }
};
转载请保留原文链接及作者
本文标题:
文章作者: LepeCoder
发布时间:
原始链接:
原文地址:https://www.cnblogs.com/lepeCoder/p/binTreepreorderTraversal.html