Binary Tree Preorder Traversal 二叉树的先序@LeetCode
来源:互联网 发布:阿里云6元虚拟主机 编辑:程序博客网 时间:2024/05/22 18:38
用递归和迭代求Pre-Order的经典题,什么时候要把In-Order, Post-Order, Level-Order 的遍历都写一遍,因为太经典了,最好能直接背下来。
package Level3;import java.util.ArrayList;import java.util.Stack;/** * 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 / 3return [1,2,3].Note: Recursive solution is trivial, could you do it iteratively? */import Utility.TreeNode;public class S128 {public static void main(String[] args) {TreeNode root = new TreeNode(1);TreeNode n1 = new TreeNode(2);root.right = n1;System.out.println(preorderTraversal(root));System.out.println(iter(root));}public static ArrayList<Integer> preorderTraversal(TreeNode root) {ArrayList<Integer> ret = new ArrayList<Integer>();rec(root, ret); return ret; }public static void rec(TreeNode root, ArrayList<Integer> ret){if(root == null){return;}ret.add(root.val);rec(root.left, ret);rec(root.right, ret);}// 迭代法public static ArrayList<Integer> iter(TreeNode root) {ArrayList<Integer> ret = new ArrayList<Integer>();Stack<TreeNode> stack = new Stack<TreeNode>();if(root == null){return ret;}stack.push(root);TreeNode cur = null;while(!stack.isEmpty()){cur = stack.peek();// 保存栈顶元素ret.add(cur.val);stack.pop();// 要先放右元素再放左元素,这样才能在pop时先pop左元素再pop右元素if(cur.right != null){stack.push(cur.right);}if(cur.left != null){stack.push(cur.left);}}return ret;}}
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public class Solution { public ArrayList<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> ret = new ArrayList<Integer>(); if(root == null){ return ret; } Stack<TreeNode> stack = new Stack<TreeNode>(); stack.push(root); while(!stack.isEmpty()){ TreeNode cur = stack.pop(); ret.add(cur.val); if(cur.right != null) stack.push(cur.right); if(cur.left != null) stack.push(cur.left); } return ret; }}
- Binary Tree Preorder Traversal 二叉树的先序@LeetCode
- 二叉树的先序遍历 Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal--二叉树的先序遍历
- binary-tree-preorder-traversal(先序遍历二叉树)
- 【leetcode】非递归先序遍历二叉树(Binary Tree Preorder Traversal)
- LeetCode 144 Binary Tree Preorder Traversal (先序遍历二叉树)
- Binary Tree Preorder Traversal 二叉树的先序遍历,使用堆栈,非递归
- 144. Binary Tree Preorder Traversal (二叉树的先序遍历)
- 【LeetCode】Construct Binary Tree from Preorder and Inorder Traversal 根据先序序列和中序序列恢复二叉树
- 105.leetcode Construct Binary Tree from Preorder and Inorder Traversal(medium)[先序、中序构造二叉树]
- Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal 先序和中序中恢复二叉树 解题报告
- [leetcode] Binary Tree Preorder Traversal 非递归先序遍历
- 【leetcode 先序遍历】Binary Tree Preorder Traversal
- [C++]LeetCode: 95 Binary Tree Preorder Traversal (先序遍历)
- leetcode:Binary Tree Preorder Traversal 先序遍历
- Binary Tree Preorder Traversal 二叉树的前序遍历
- binary-tree-preorder-traversal(二叉树的前序遍历)
- LeetCode OJ 之 Binary Tree Preorder Traversal (二叉树的前序遍历)
- LeetCode题解:Unique Binary Search Trees
- Single Number 数组找只出现一次的数@LeetCode
- Linked List Cycle 有环的链表@LeetCode
- Unique Binary Search Trees 求BST的组合总数 @LeetCode
- Web & Java: web server vs. app server
- Binary Tree Preorder Traversal 二叉树的先序@LeetCode
- LeetCode题解:Maximum Subarray
- Adding and Removing Tags on GitHub
- Maximum Subarray 最大子数组和(连续)@LeetCode
- unity3d 通过向量求目标位置
- Unique Paths 求在矩阵里从左上走到右下的总方法数@LeetCode
- linux内核的取址操作list_entry()
- linux内核中常用的数据结构和操作详解
- Unique Paths II 求在矩阵里从左上走到右下的总方法数(有障碍)@LeetCode