Binary Tree Inorder Traversal
1. Recursive
Straight Forward, Add left -> root -> right
/** * 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: Inorder in ArrayList which contains node values. */ public ArrayList<Integer> inorderTraversal(TreeNode root) { // write your code here ArrayList<Integer> rst = new ArrayList<Integer>(); if(root == null) { return rst; } traversal(rst, root); return rst; } private void traversal(ArrayList<Integer> rst, TreeNode root) { if (root == null) { return; } traversal(rst, root.left); rst.add(root.val); traversal(rst, root.right); } }
2. Iterator
1. Create a node to present current node.
2. If current node is not null and stack is not empty
1) keep adding all the left child to the stack.
2) move the current node to the top of the stack
3) pop the top node and add it to the result list
4) let the current node to be the right child.
/** * 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: Inorder in ArrayList which contains node values. */ public ArrayList<Integer> inorderTraversal(TreeNode root) { // write your code here ArrayList<Integer> rst = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode curNode = root; while (curNode != null || !stack.empty()) { //reach deepest left child while (curNode != null) { stack.push(curNode); curNode = curNode.left; } curNode = stack.peek(); stack.pop(); rst.add(curNode.val); curNode = curNode.right; } return rst; } }
分类:
lintCode
posted on 2017-03-12 01:54 codingEskimo 阅读(96) 评论(0) 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】博客园的心动:当一群程序员决定开源共建一个真诚相亲平台
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一则复杂 SQL 改写后有感
· golang中写个字符串遍历谁不会?且看我如何提升 50 倍
· C# 代码如何影响 CPU 缓存速度?
· 智能桌面机器人:使用 .NET 为树莓派开发 Wifi 配网功能
· C# 模式匹配全解:原理、用法与易错点
· 《程序员的底层思维》读后感
· 曾经风光无限的 Oracle DBA 已经落伍了吗?
· 一则复杂 SQL 改写后有感
· C# 锁机制全景与高效实践:从 Monitor 到 .NET 9 全新 Lock
· 接口被刷百万QPS,怎么防?