[leet code] Binary Tree Inorder Traversal
2014-01-04 10:32
302 查看
Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree
return
Note: Recursive solution is trivial, could you do it iteratively?
思路与 Binary Tree Preorder Traversal 相像. 如果使用递归, 则只需要更改节点值提取顺序. 顺序改为: 左子节点值->节点值->右节点值
如果不用递归, 参考Binary Tree Preorder Traversal 可以利用栈进出实现inorder. 需要铭记在心的是, 对于每一个节点, 顺序永远是左子节点值->节点->右子节点值. 于是, 当检验任意节点时, 如果有左子节点, 则将当前节点压入栈中,
并进而检验该节点左子树, 不断重复该操作直到栈清空且当前节点指向null. 这时可以提取储存在栈中最顶端的节点 (该节点为中节点), 并检查其右子树. (该做法思路来自网上)
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?
思路与 Binary Tree Preorder Traversal 相像. 如果使用递归, 则只需要更改节点值提取顺序. 顺序改为: 左子节点值->节点值->右节点值
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public ArrayList<Integer> inorderTraversal(TreeNode root) { ArrayList<Integer> nodeVal = new ArrayList<Integer>(); if (root == null) return nodeVal; TreeNode node = root; inOrder(nodeVal, node); return nodeVal; } public void inOrder(ArrayList<Integer> nodeVal, TreeNode node){ if (node.left != null) inOrder(nodeVal, node.left); nodeVal.add(node.val); if (node.right != null) inOrder(nodeVal, node.right); } }
如果不用递归, 参考Binary Tree Preorder Traversal 可以利用栈进出实现inorder. 需要铭记在心的是, 对于每一个节点, 顺序永远是左子节点值->节点->右子节点值. 于是, 当检验任意节点时, 如果有左子节点, 则将当前节点压入栈中,
并进而检验该节点左子树, 不断重复该操作直到栈清空且当前节点指向null. 这时可以提取储存在栈中最顶端的节点 (该节点为中节点), 并检查其右子树. (该做法思路来自网上)
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public ArrayList<Integer> inorderTraversal(TreeNode root) { ArrayList<Integer> nodeVal = new ArrayList<Integer>(); Stack<TreeNode> st = new Stack(); if (root == null) return nodeVal; TreeNode node = root; while (!st.isEmpty() || node != null){ //left node exist if (node != null){ st.push(node); node = node.left; } else { // locate to the last unextract middle node node = st.peek(); nodeVal.add(node.val); st.pop(); node = node.right; } } return nodeVal; } }
相关文章推荐
- [leet code] Construct Binary Tree from Inorder and Postorder Traversal
- [leet code] Construct Binary Tree from Preorder and Inorder Traversal
- Lettcode_94_Binary Tree Inorder Traversal
- LeedCode OJ --- Binary Tree Inorder Traversal
- LintCode: Binary Tree Inorder Traversal
- LintCode: Binary Tree Inorder Traversal
- [leet code] Binary Tree Postorder Traversal
- [leet code] Binary Tree Zigzag Level Order Traversal
- lintcode 容易题:Binary Tree Inorder Traversal 二叉树的中序遍历
- CODE 27: Construct Binary Tree from Inorder and Postorder Traversal
- Leet Code Binary Tree Inorder Traversal(非递归且实现不用栈的空间复杂度为O(1)的实现)
- [leet code] Binary Tree Preorder Traversal
- [leet code] Binary Tree Level Order Traversal
- CODE 28: Construct Binary Tree from Preorder and Inorder Traversal
- leecode 解题总结:105. Construct Binary Tree from Preorder and Inorder Traversal
- lintcode-medium-Construct Binary Tree from Inorder and Postorder Traversal
- leecode 解题总结:106. Construct Binary Tree from Inorder and Postorder Traversal
- 【Leetcode】Binary Tree Inorder Traversal (Tree Traversal)(转自Code_Ganker)
- [leet code] Binary Tree Level Order Traversal II
- LintCode Binary Tree Inorder Traversal 二叉树的中序遍历(非递归)