首页 > 代码库 > [leetcode]Binary Tree InorderTraversal
[leetcode]Binary Tree InorderTraversal
Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes‘ values.
For example:
Given binary tree{1,#,2,3}
,1 2 / 3
return
[1,3,2]
.Note: Recursive solution is trivial, could you do it iteratively?
confused what
"{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
算法思路:
1. 递归实现
1 /** 2 * Definition for binary tree 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */10 public class Solution {11 List<Integer> res = new ArrayList<Integer>();12 public List<Integer> inorderTraversal(TreeNode root) {13 if(root == null) return res;14 if(root.left != null) inorderTraversal(root.left);15 res.add(root.val);16 if(root.right != null) inorderTraversal(root.right);17 return res;18 }19 }
思路2:
非递归版本:
借用栈,将当前节点的所有左节点(左节点的左节点....)压栈,然后依次弹栈处理当前节点并处理右子树
代码如下:
1 public class Solution { 2 public List<Integer> inorderTraversal(TreeNode root) { 3 List<Integer> res = new ArrayList<Integer>(); 4 if(root == null) return res; 5 Stack<TreeNode> stack = new Stack<TreeNode>(); 6 TreeNode current = root; 7 while(true){ 8 while(current != null){ 9 stack.push(current);10 current = current.left;11 }12 if(stack.isEmpty()) break;13 current = stack.pop();14 res.add(current.val);15 current = current.right;16 }17 return res;18 }19 }
[leetcode]Binary Tree InorderTraversal
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。