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

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

     示例:

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

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


    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    /*
    算法思想:
        采用递归的思想,即借助系统栈,效率较低。二叉树的前序遍历规则:1. 访问根结点; 2. 遍历左子树; 3. 遍历右子树 
    */
    /*
    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;
        }
    };*/
    
    /*
    算法思想:
        采用迭代的方法,使用了一个辅助结点p,这种写法其实可以看作是一个模版,对应的还有中序和后序的模版写法,形式很统一,方便于记忆。
        辅助结点p初始化为根结点,while循环的条件是栈不为空或者辅助结点p不为空,在循环中首先判断如果辅助结点p存在,那么先将p加入栈中,然后将p的结点值加入结果res中,此时p指向其左子结点。否则如果p不存在的话,表明没有左子结点,我们取出栈顶结点,将p指向栈顶结点的右子结点。
    */
    //算法实现:
    class Solution {
    public:
        vector<int> preorderTraversal(TreeNode* root) {
            vector<int> res;
            stack<TreeNode*> s;
            TreeNode *p = root;
            while (!s.empty() || p) {
                if (p) {
                    s.push(p);
                    res.push_back(p->val);
                    p = p->left;
                } else {
                    TreeNode *t = s.top(); 
                    s.pop();
                    p = t->right;
                }
            }
            return res;
        }
    };
  • 相关阅读:
    kinect笔记 一 、 配置环境
    WPF 控制键盘鼠标
    EC-R3308CC四核工业主机
    【免费】Station P1极客主机免费试用活动
    【Sublinux】Sublinux固件下载及使用模式
    ROC-RK3399-PC Plus 六核64位高性能主板
    ROC-RK3308B-CC Plus IoT四核64位开源主板
    【集群服务器】BMC基板管理控制器
    NPU算力集成解决方案
    【技术案例】RK3399/RK3399Pro屏幕拼接
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10058982.html
Copyright © 2011-2022 走看看