【leetcode 144. 二叉树的前序遍历】解题报告

前往二叉树的:前序,中序,后序 遍历算法

方法一:递归

    vector<int> res;
    vector<int> preorderTraversal(TreeNode* root) {
        if (!root) return res;
        res.push_back(root->val);
        if (root->left) preorderTraversal(root->left);
        if (root->right) preorderTraversal(root->right);
        return res;
    }

方法二:非递归

    vector<int> preorderTraversal(TreeNode* root)
    {
        vector<int> res;
        if (!root) return res;
        stack<TreeNode*> S;
        TreeNode* p = root;
        while(p||!S.empty())
        {
            if (p)  // 访问左子树
            {
                res.push_back(p->val);
                S.push(p);
                p=p->left;
            }
            else    // 访问右子树
            {
                p=S.top();
                S.pop();
                p=p->right;
            }
        }
        return res;
    }

方法三:非递归(该方法可用于后序遍历,只需改变一处代码)

    vector<int> res;
    vector<int> preorderTraversal(TreeNode* root) {
        if (!root) return res;
        stack<TreeNode*> S;
        S.push(root);
        while (!S.empty())
        {
            root=S.top();
            S.pop();
            if (root->right) S.push(root->right);  // 要实现后序遍历,需要以下两行调换
            if (root->left) S.push(root->left);
            res.push_back(root->val);   // res.insert(0,root->val)即为后序遍历
        }
        return res;
    }

结论:

  • 方法三这种形式只适合前序和后序遍历,不适合中序遍历,中序遍历较为麻烦
  • 方法二这种形式只适合前序和中序遍历,不适合后序遍历,后序遍历较为麻烦

原文地址:https://www.cnblogs.com/brianyi/p/10799458.html

时间: 2024-08-01 15:21:50

【leetcode 144. 二叉树的前序遍历】解题报告的相关文章

[leetcode] 144. 二叉树的前序遍历

144. 二叉树的前序遍历 class Solution { public List<Integer> preorderTraversal(TreeNode root) { List<Integer> list = new ArrayList<>(); if (root == null) return list; dfs(root, list); return list; } public void dfs(TreeNode node, List<Integer&

LeetCode 144. Binary Tree Preorder Traversal 解题报告

144. Binary Tree Preorder Traversal My Submissions Question Total Accepted: 108336 Total Submissions: 278322 Difficulty: Medium Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 2 / 3

144. 二叉树的前序遍历

1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution 11 { 12 vector<int> res; 13 public: 14 ve

leetcode | 二叉树的前序遍历、中序遍历、后续遍历的非递归实现

Binary Tree Preorder Traversal:https://leetcode.com/problems/binary-tree-preorder-traversal/ Binary Tree Inorder Traversal :https://leetcode.com/problems/binary-tree-inorder-traversal/ Binary Tree Postorder Traversal:https://leetcode.com/problems/bin

Leetcode:二叉树的前序遍历

Leetcode: 二叉树的前序遍历 最近在复习数据结构, 感觉很多东西都忘得的差不多了,哪怕是看完书再看视频,还是容易忘,所以干脆想着配合leetcode来刷吧,Python实现起来很简单,但是C语言也不能丢,所以C语言和Python一起吧. 题目: 给定一个二叉树,返回它的前序遍历. 输入: [1,null,2,3] 1 2 / 3 输出: [1,2,3] Python 实现 # Definition for a binary tree node. # class TreeNode(obje

lintcode 容易题:Binary Tree Preorder Traversal 二叉树的前序遍历

题目: 二叉树的前序遍历 给出一棵二叉树,返回其节点值的前序遍历. 样例 给出一棵二叉树 {1,#,2,3}, 1 2 / 3 返回 [1,2,3]. 挑战 你能使用非递归实现么? 解题: 通过递归实现,根节点->左节点->右节点 Java程序: /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(in

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树

问题描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. 思路: 在二叉树的前序遍历序列中,第一个数字总是树的根结点的值.但在中序遍历序列中,根结点的值在序列的中间,左子树的结点的值位于根结点的值的左边,而右子树的结点的值位于根结点的值的右边.因此我们需要扫描中序遍历序列,才能找到根结点的值. 如下图所示,

LeetCode-重建二叉树(前序遍历+中序遍历)

重建二叉树 LeetCode-105 首次需要知道前序遍历和中序遍历的性质. 解题思路如下:首先使用前序比遍历找到根节点,然后使用中序遍历找到左右子树的范围,再分别对左右子树实施递归重建. 本题的难点就是如何在前序遍历中找到左右子树的范围以分别重构,这可以根据中序遍历中的左右子树的数量来分辨.使用前序遍历的根节点和中序遍历的根节点相同时,表示此时前序遍历的左子树已经找到了. 具体的实施时需要带有4个参数分别控制左右子树的范围. /** * 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.

根据二叉树的前序遍历和中序遍历重建二叉树

题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回. 1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(