码迷,mamicode.com
首页 > 其他好文 > 详细

144. Binary Tree Preorder Traversal

时间:2016-03-02 17:45:10      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

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

For example:

Given binary tree {1,#,2,3},

return [1,2,3].

   

解题思路:

题目很简单,就是求一个二叉树的前序遍历。。使用栈实现递归过程。。。这里分别给出保存TreeNode的栈和保存TreeNode指针的栈。。

/**

 * Definition for a binary tree node.

 * struct TreeNode {

 *     int val;

 *     TreeNode *left;

 *     TreeNode *right;

 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}

 * };

 */

class Solution {

public:

    vector<int> preorderTraversal(TreeNode* root) {

        vector<int>res;

        stack<TreeNode>s;

        if(root==NULL)return res;

        s.push(*(root));

        while(!s.empty()){

            TreeNode tmp=s.top();

            s.pop();

            res.push_back(tmp.val);

            if(tmp.right!=NULL)s.push(*(tmp.right));

            if(tmp.left!=NULL)s.push(*(tmp.left));

        }

        return res;

    }

};

   

/**

 * Definition for a binary tree node.

 * struct TreeNode {

 *     int val;

 *     TreeNode *left;

 *     TreeNode *right;

 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}

 * };

 */

class Solution {

public:

    vector<int> preorderTraversal(TreeNode* root) {

        vector<int>res;

        stack<TreeNode*>s;

        if(root==NULL)return res;

        s.push(root);

        while(!s.empty()){

            TreeNode* tmp=s.top();

            s.pop();

            res.push_back(tmp->val);

            if(tmp->right!=NULL)s.push(tmp->right);

            if(tmp->left!=NULL)s.push(tmp->left);

        }

        return res;

    }

};

   

java如果使用栈或者递归方法,耗时2ms,在discuss那里看到不用stack,用rights数组保存遍历过程中遇到的右结点,当当前结点的左结点为空,则从rights数组中找到最近的右结点。。。该方法耗费空间。。

/**

 * Definition for binary tree

 * public class TreeNode {

 *     int val;

 *     TreeNode left;

 *     TreeNode right;

 *     TreeNode(int x) { val = x; }

 * }

 */

public class Solution {

   public List<Integer> preorderTraversal(TreeNode root) {

            List<Integer>order=new ArrayList<Integer>();

            List<TreeNode>rights=new ArrayList<TreeNode>();

            if(root==null)return order;

            TreeNode cur=root;

            int ind=-1;

            while(cur!=null){

                order.add(cur.val);

                if(cur.right!=null){

                    ind++;

                    rights.add(ind,cur.right);

                }

                if(cur.left!=null)cur=cur.left;

                else{

                    cur=ind<0?null:rights.get(ind);

                    ind--;

                }

                   

            }

            return order;

        }

}

 

144. Binary Tree Preorder Traversal

标签:

原文地址:http://www.cnblogs.com/olivelv/p/5235684.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!