zoukankan      html  css  js  c++  java
  • Leetcode 144.二叉树的前序遍历

    1.题目描述

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

     示例:

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

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

    2.解法一:递归

    /**
     * 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) {
            //先判空(最简洁的写法)
            if(root){
                res.push_back(root->val);
                preorderTraversal(root->left);
                preorderTraversal(root->right);            
            }
            return res;
        }
    private:
        vector<int> res;
    };

    3.解法二:非递归(栈)

    栈的作用

    • 1.逆序:abc输入,cba输出;
    • 2.路径的回溯:a-->b-->c-->d,特别是树的深度优先遍历,也是这道题的用处。(不分析太详细,给大脑留思考与想象的空间,这很重要。)
    class Solution {
    public:
        vector<int> preorderTraversal(TreeNode* root) {
    
            vector<int> res;
            //使用stack
            stack<TreeNode*> stack;
            TreeNode* p = root;
    
            //综合整理出来的循环条件
            while (p || !stack.empty())
            {
                //if(p)的判断为关键点
                if (p){
                    stack.push(p);
                    res.push_back(p->val);
                    p = p->left;
                }
                else{
                    p = stack.top();
                    stack.pop();
                    p = p->right;
                }
            }
            return res;
        }
    };
  • 相关阅读:
    vue-fullcalendar插件
    iframe 父框架调用子框架的函数
    关于调试的一点感想
    hdfs 删除和新增节点
    hadoop yarn 实战错误汇总
    Ganglia 安装 No package 'ck' found
    storm on yarn(CDH5) 部署笔记
    spark on yarn 安装笔记
    storm on yarn安装时 提交到yarn失败 failed
    yarn storm spark
  • 原文地址:https://www.cnblogs.com/paulprayer/p/10099263.html
Copyright © 2011-2022 走看看