LeetCode题解-144-Binary Tree Preorder Traversal
来源:互联网 发布:网络舆情引导机制 编辑:程序博客网 时间:2024/05/20 13:41
尽管写LeetCode解答主要是为了自己整理思路,但是如果对您也正好有帮助,请点个赞给菜鸟一点鼓励吧 :-)
原题
解法概览
本题共有两种解法,1种递归,1种迭代。
前序遍历:1)访问根节点;2)前序遍历左子树;3)前序遍历右子树。
解法1
解法分析
递归法。访问根节点,递归访问左子树,递归访问右子树。
代码
public class Solution144_Recursive { public List<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> allList = new ArrayList<Integer>(); if (root == null) return allList; ArrayList<Integer> leftChildList = (ArrayList<Integer>)preorderTraversal(root.left); ArrayList<Integer> rightChildList = (ArrayList<Integer>)preorderTraversal(root.right); allList.add(root.val); allList.addAll(leftChildList); allList.addAll(rightChildList); return allList; }}
解法2
解法分析
1)当栈顶指针非空,应遍历左子树(遍历时直接访问节点,与中序遍历不同);
2)若栈顶指针为空,则退回上一层,若从左子树返回,则访问当前层的的根节点,若从右子树返回,则访问当前层的遍历结束,继续退栈;
2)若栈顶指针为空,则退回上一层,若从左子树返回,则访问当前层的的根节点,若从右子树返回,则访问当前层的遍历结束,继续退栈;
图解
看不清图的话可以在浏览器 页面中单独打开。
代码
public class Solution144_iterator { public List<Integer> preorderTraversal(TreeNode root) { Stack<TreeNode> treeNodeStack = new Stack<TreeNode>(); ArrayList<Integer> treeValList = new ArrayList<Integer>(); treeNodeStack.push(root); while (!treeNodeStack.empty()){ //从根节点访问到最左的节点 while (treeNodeStack.peek() != null){ TreeNode currentNode = treeNodeStack.peek(); treeValList.add(currentNode.val); treeNodeStack.push(currentNode.left); } treeNodeStack.pop(); if (!treeNodeStack.empty()){ TreeNode currentNode = treeNodeStack.pop(); treeNodeStack.push(currentNode.right); } } return treeValList; }}
0 0
- LeetCode题解-144-Binary Tree Preorder Traversal
- LeetCode题解:Binary Tree Preorder Traversal
- LeetCode题解:Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal题解
- LeetCode(144)Binary Tree Preorder Traversal
- LeetCode: Binary Tree Preorder Traversal [144]
- [leetcode 144]Binary Tree Preorder Traversal
- leetcode || 144、Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal - LeetCode 144
- LeetCode 144 : Binary Tree Preorder Traversal
- LeetCode 144 Binary Tree Preorder Traversal
- LeetCode 144: Binary Tree Preorder Traversal
- Leetcode[144]-Binary Tree Preorder Traversal
- leetcode(144):Binary Tree Preorder Traversal
- Binary Tree Preorder Traversal (leetcode 144)
- leetcode[144]:Binary Tree Preorder Traversal
- [Leetcode 144, Medium] Binary Tree Preorder Traversal
- LeetCode(144) Binary Tree Preorder Traversal
- 中文乱码的解决之道,理清UTF8,UTF16,GB2312,Big5,Unicode之间的关系
- android 淘宝天猫支付宝浏览器打开本地app传递参数打开应用内页
- CSS中的em单位
- 主从数据库架构
- 华为牛人的成长经历
- LeetCode题解-144-Binary Tree Preorder Traversal
- centos6 编译nginx1.9.1
- 域名注册流程
- 单向散列函数(Hash)
- R语言ggplot2绘图——柱状图
- iOS开发导航栏常用属性
- RecyclerView多布局与Item点击事件
- js字符串,数组元素去重
- 网站制作如何防御DDOS攻击