码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode144 二叉树的前序遍历(C++)

时间:2018-11-07 11:36:21      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:roo   实现   ret   describe   输入   amp   二叉树   private   nbsp   

题目描述:

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

 示例:

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

输出: [1,2,3]

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

 

数据结构定义:

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

 

算法思想:

/*一、递归
    效率较低,了解即可。

二叉树的前序遍历规则:
1. 访问根结点; 
2. 遍历左子树; 
3. 遍历右子树 
*/
/*
Author:Parzulpan
Date:2018-11-7
Describe:
*/

class Solution {
private:
    void rec(TreeNode* root,vector<int> &ret){
        if(root != NULL){
            ret.push_back(root->val);
            rec(root->left,ret);
            rec(root->right,ret);
        }
    }
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> ret;
        rec(root,ret);
        return ret;
    }
};
/*
二、迭代
    效率较高,重点掌握。利用栈实现。
*/
class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> ret;
        stack<TreeNode*> s;
        while(root!=NULL){
            ret.push_back(root->val);  //这是关键           
            if(root->left != NULL){  //存在左子树                
                if(root->right != NULL)  //存在右子树,将右子树压入栈中
                    s.push(root->right);                
                root = root->left;  //由于存在左子树,不论是否存在右子树,都继续遍历左子树
                continue;
            }
            
            if(root->right != NULL){  //不存在左子树,但存在右子树,直接遍历右子树
                root = root->right;
                continue;
            }
           
            if(!s.empty()){  //不存在左子树,且不存在右子树,但栈不为空,即只有一个根节点 
                root = s.top();   //弹出栈顶元素,继续遍历
                s.pop();
                continue;
            }
            break;
        }
        return ret;
    }
};

 

分析总结:

LeetCode144 二叉树的前序遍历(C++)

标签:roo   实现   ret   describe   输入   amp   二叉树   private   nbsp   

原文地址:https://www.cnblogs.com/parzulpan/p/9920764.html

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