Question:
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.
分析:
建一个Stack,一个布尔变量,一个节点变量。利用布尔变量和stack,使得节点变量遍历二叉树。
Code:
/**
* 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) {
// Start typing your Java solution below
// DO NOT write main() function
ArrayList<Integer> res = new ArrayList<Integer>();
Stack<TreeNode> st = new Stack<TreeNode>();
boolean flag = true;
TreeNode cur = root;
while(flag){
if(cur != null){
st.push(cur);
cur = cur.left;
}
else{
if(st.isEmpty()) flag = false;
else{
cur = st.pop();
res.add(cur.val);
cur = cur.right;
}
}
}
return res;
}
}
总结:
这个数据结构不同于DFS,BFS的架构。巧妙运用布尔变量解决了一个遍历难题。结构精彩!