66.Binary Tree Preorder Traversal-二叉树的前序遍历(容易题)
来源:互联网 发布:js event button 编辑:程序博客网 时间:2024/05/23 00:56
二叉树的前序遍历
题目
给出一棵二叉树,返回其节点值的前序遍历。
样例
给出一棵二叉树 {1,#,2,3},
1
\
2
/
3
返回 [1,2,3].挑战
你能使用非递归实现么?
题解
1.递归法
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */public class Solution { /** * @param root: The root of binary tree. * @return: Preorder in ArrayList which contains node values. */ private ArrayList<Integer> result = new ArrayList<Integer>(); public ArrayList<Integer> preorderTraversal(TreeNode root) { if (root == null) { return result; } result.add(root.val); preorderTraversal(root.left); preorderTraversal(root.right); return result; }}
2.非递归法
前序遍历的规则是从根节点开始,先遍历左子节点再遍历右子节点。
遍历规则:
1.对于任一结点P,若其左子节点不为null,记录该结点后则将P入栈,并将P赋值为P的左子节点。
2.对于任一结点P,若其左子节点为null,则将P赋值为栈顶节点后弹栈,将P赋值为其右子节点,直到P和栈都为null为止。
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */public class Solution { /** * @param root: The root of binary tree. * @return: Preorder in ArrayList which contains node values. */ public ArrayList<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> result = new ArrayList<Integer>(); if (root == null) { return result; } Stack<TreeNode> stack = new Stack<>(); TreeNode p = root; while (p!=null || !stack.empty()) { while (p!=null) { result.add(p.val); stack.push(p); p = p.left; } if (!stack.empty()) { p = stack.peek(); stack.pop(); p = p.right; } } return result; }}
Last Update 2016.8.29
0 0
- 66.Binary Tree Preorder Traversal-二叉树的前序遍历(容易题)
- Binary Tree Preorder Traversal 二叉树的前序遍历
- binary-tree-preorder-traversal(二叉树的前序遍历)
- LeetCode OJ 之 Binary Tree Preorder Traversal (二叉树的前序遍历)
- LintCode Binary Tree Preorder Traversal二叉树的前序遍历(非递归)
- 【LeetCode】Binary Tree Preorder Traversal 二叉树的前序遍历(3种方法)- Easy+
- LeetCode 144 Binary Tree Preorder Traversal(二叉树的前序遍历)+(二叉树、迭代)
- 144. Binary Tree Preorder Traversal 二叉树的前序遍历
- Binary Tree Preorder Traversal 二叉树的前向遍历(迭代非递归版本)
- 二叉树的先序遍历 Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal--二叉树的先序遍历
- binary-tree-preorder-traversal(先序遍历二叉树)
- 67.Binary Tree Inorder Traversal-二叉树的中序遍历(容易题)
- 68.Binary Tree Postorder Traversal-二叉树的后序遍历(容易题)
- Binary Tree Preorder Traversal 链表的前序遍历
- LeetCode Binary Tree Preorder Traversal 前序遍历二叉树 递归和非递归解法
- LeetCode:Binary Tree Preorder Traversal(非递归方法前序遍历二叉树)
- 144. Binary Tree Preorder Traversal (二叉树的先序遍历)
- 关于Hadoop的GenericOptionsParser…
- 如何利用Nodexl画图——以绘制…
- 3.11
- 社交网络分析:网络中心性
- Spark map 处理表格数据
- 66.Binary Tree Preorder Traversal-二叉树的前序遍历(容易题)
- Spark Stream 教程
- Spark SQL重点
- Spark mlib FPGrowth&nb…
- Spark的最短路径详解
- 读书笔记之三十二----《信用…
- 评分卡模型剖析之一(woe、I…
- 数据挖掘技术(四)——聚类
- scikitlearn/theano多分类问题详解