leetcode 144. 二叉树的前序遍历

发布时间:2022-07-04 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了leetcode 144. 二叉树的前序遍历脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

leetcode 144. 二叉树的前序遍历

前序遍历迭代算法:

二叉树的前序遍历二叉树的遍历,整体上看都是好理解的。三种遍历的迭代写法中,数前序遍历最容易理解。递归思路:先树根,然后左子树,然后右子树。每棵子树递归。

代码:

/**
 * 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> result;
    vector<int> PReorderTraversal(TreeNode* root) {
        transverse(root);
        return result;
    }
    void transverse(TreeNode*node)
    {
        if (node != NULL)
        {
            result.push_back(node->val);
            if(node->left!=NULL)
            {
                transverse(node->left);
            }
            if(node->right!=NULL)
            {
                transverse(node->right);
            }
        }
    }
};

2 迭代思路

在迭代算法中,思路演变成,每到一个节点 A,就应该立即访问它。因为,每棵子树都先访问其根节点。对节点的左右子树来说,也一定是先访问根。在 A 的两棵子树中,遍历完左子树后,再遍历右子树。因此,在访问完根节点后,遍历左子树前,要将右子树压入栈。

思路

栈S;
p= root;
while(p || S不空){
    while(p){
        访问p节点;
        p的右子树入S;
        p = p的左子树;
    }
    p = S栈顶弹出;
}

迭代遍历的代码

/**
 * 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> result;
    vector<int> preorderTraversal(TreeNode* root) {
        stack<TreeNode*>S;//用来存放右子树的节点
        TreeNode*Rt = root;
        while(Rt||S.size()) //根节点不为空  或者 栈中有元素
        {
            while(Rt) //根节点不为空
            {
            result.push_back(Rt->val);//先将Rt节点的访问值保存
            S.push(Rt->right); //先保存右子树
            Rt = Rt->left;//将指针指向Rt的左子树节点
            }
            Rt = S.top();S.pop(); //当左子树访问完后,紧接着访问右子树,栈顶元素出栈
        }
        return result;
    }
};

&nbsp;

脚本宝典总结

以上是脚本宝典为你收集整理的leetcode 144. 二叉树的前序遍历全部内容,希望文章能够帮你解决leetcode 144. 二叉树的前序遍历所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。