`

Binary Tree Preorder Traversal

阅读更多
Given a binary tree, return the preorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},
   1
    \
     2
    /
   3
return [1,2,3].

前序遍历一棵树,我们可以用递归,也可以借助堆栈用迭代来解决,因为前序遍历的顺序是根-左-右,因此我们压栈的时候顺序为根-右-左。下面是两个方法的代码:
递归:
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<Integer>();
        if(root == null) return list;
        getPreorder(root, list);
        return list;
    }
    public void getPreorder(TreeNode root, List<Integer> list) {
        if(root == null) return;
        list.add(root.val);
        getPreorder(root.left, list);
        getPreorder(root.right, list);
    }
}


迭代:
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<Integer>();
        Stack<TreeNode> stack = new Stack<TreeNode>();
        if(root == null) return list;
        stack.add(root);
        while(!stack.isEmpty()) {
            TreeNode node = stack.pop();
            list.add(node.val);
            if(node.right != null) {
                stack.push(node.right);
            }
            if(node.left != null) {
                stack.push(node.left);
            }
        }
        return list;
    }
}
分享到:
评论

相关推荐

    144.Binary Tree Preorder Traversal二叉树的前序遍历【LeetCode单题讲解系列】

    144.Binary_Tree_Preorder_Traversal二叉树的前序遍历【LeetCode单题讲解系列】

    Construct Binary Tree from Preorder and Inorder Traversal

    Construct Binary Tree from Preorder and Inorder Traversal 根据先序,中序建立二叉树

    python-leetcode题解之144-Binary-Tree-Preorder-Traversal

    python python_leetcode题解之144_Binary_Tree_Preorder_Traversal

    leetcode-tree

    144-Binary Tree Preorder Traversal94-Binary Tree Inorder Traversal145-Binary Tree Postorder Traversal(后续的非递归时间不够可以先跳过,有点难)层次遍历,队列辅助,相当于广搜。102-Binary Tree Level ...

    js-leetcode题解之144-binary-tree-preorder-traversal.js

    javascript js_leetcode题解之144-binary-tree-preorder-traversal.js

    Binary tree traversal.zip

    在这个名为"Binary tree traversal.zip"的压缩包中,包含了作者在算法课上完成的一个关于二叉树遍历的作业。这个作业使用C++编程语言,并在Visual Studio 2019环境下编写。以下是关于二叉树遍历的详细知识: 1. **...

    105.construct binary tree from preorder and inorder traversal从前序和与中序遍历序列构造二叉树【LeetCode单题讲解系列】

    105.construct_binary_tree_from_preorder_and_inorder_traversal从前序

    Preorder-binary-tree-(tree-print.zip_print binary tree_tree_打印二叉

    先序遍历(Preorder Traversal)是遍历二叉树的一种方法,它按照“根-左-右”的顺序访问树中的每个节点。在本主题中,我们将探讨如何实现先序遍历以及将其结果以树状打印出来。 先序遍历是一种递归算法,其基本步骤...

    leetcode530-leetcode:力扣在线评委

    leetcode 530 力扣在线评委 # 问题 困难 解决方案 1 简单的 2 中等的 3 中等的 ...Binary Tree Preorder Traversal 2016.06.06 94. Binary Tree Inorder Traversal 318. Maximum Product of Word Length

    Java Binary Tree Order

    在`BinaryTree_PreOrder.java`中,应该能找到前序遍历的代码实现,其递归版本会首先访问根节点,然后遍历左子树,最后遍历右子树。 5. **遍历算法的非递归实现** 虽然递归是最直观的方法,但非递归实现(如使用栈...

    二叉树详解 binary tree

    - 前序遍历 (Preorder Traversal) - 中序遍历 (Inorder Traversal) - 后序遍历 (Postorder Traversal) - 层次遍历 (Level Order Traversal) ##### 2.2 进阶操作 - **查找**: 在二叉树中查找特定的节点。 - **...

    LeetCode最全代码

    * [Binary Search Tree](https://github.com/kamyu104/LeetCode#binary-search-tree) * [Breadth-First Search](https://github.com/kamyu104/LeetCode#breadth-first-search) * [Depth-First Search]...

    LeetCode-NoteBook:docsifyjs

    LeetCode笔记本docsifyjsLeetCode算法Java c / c ++ javascript的基本知识简单的1. Two Sum 704. Classical Binary Search2. 3 Sum206. Reverse Linked List中等的... Binary Tree Preorder Traversal145. Binary Tree

    数据结构教学课件:chapter5 A Binary Tree Node ADT.ppt

    主要有三种类型的遍历:前序遍历(Preorder Traversal)、后序遍历(Postorder Traversal)和中序遍历(Inorder Traversal)。前序遍历先访问根节点,再遍历左子树,最后遍历右子树;后序遍历则是先遍历左子树和右子...

    Binary_Tree_Level_Order_Traversa

    在标签“BinaryTree”中,我们聚焦于二叉树相关的算法和数据结构。二叉树的其他遍历方法还包括前序遍历(Preorder Traversal,根-左-右)、中序遍历(Inorder Traversal,左-根-右)和后序遍历(Postorder Traversal...

    LeetCode

    例如,"Binary Tree Preorder Traversal"(二叉树的前序遍历)要求使用递归或迭代方法遍历二叉树节点,这对于理解递归和树结构的遍历至关重要。 在解决LeetCode问题的过程中,开发者不仅能够提升编程技巧,还能锻炼...

    leetcode-answer

    再如,"Binary Tree Preorder Traversal"(二叉树的前序遍历)是一个与数据结构“树”紧密相关的问题。在Java中,我们可以用递归或栈来实现树的遍历。递归方式简洁明了,但需要注意处理递归基;栈方法则需要模拟调用...

    recover-the-binary-tree.zip_The Tree

    在这个场景中,我们关注的是如何通过先序遍历(Preorder Traversal)和中序遍历(Inorder Traversal)的数据来“恢复”一个二叉树。这个问题来源于计算机科学中的树结构重建问题,常用于面试或算法训练。 先序遍历...

    Leetcode-OJ:Leetcode解决方案

    4. "Binary Tree Preorder Traversal":递归或迭代方式实现二叉树的前序遍历。 六、进阶挑战 随着对LeetCode的深入,可以尝试更高级别的题目,如图算法、位运算、字符串处理等。同时,参加LeetCode的周赛和双周赛,...

Global site tag (gtag.js) - Google Analytics