题目难度中等,就是要求不用递归的情况下进行中序遍历:
中序遍历就是先访问左孩子的值,再访问父节点的值,最后访问右孩子的值。这样的话,一棵树的最最左边的子节点的值一定是第一个被访问的
所以实现起来的思路就是,沿着树一直向左走,直到走不动为止,这个时候再看看当前节点是否有右节点,如果有的话对该又节点进行前面的操作。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
if (root == null) {
return list;
}
Stack stack = new Stack(); // 创建堆栈对象
TreeNode node = root;
while(node != null || !stack.empty()) {
while(node != null) {
stack.push(node);
node = node.left;
}
node = (TreeNode)stack.pop();
list.add(node.val);
node = node.right;
}
return list;
}
}