- 描述
Given a binary tree, return the inorder traversal of its nodes’ values.
For example:
Given binary tree [1,null,2,3],
1
\
2
/
3
return [1,3,2].
Note: Recursive solution is trivial, could you do it iteratively?
思路
二叉树的中序遍历,首先想到的就是递归解决,但是题目建议最好使用迭代的方法。从理论上面来说,所有的递归解决方案都可以使用迭代方案代替。这里的话可以采用模拟递归的思路去解决。我们知道,递归在程序上面是有一个调用堆栈去管理的,所以在这里我们可以用一个栈去模拟递归函数,保存结点。代码(c#)
public IList<int> InorderTraversal(TreeNode root)
{
IList<int> list = new List<int>();
Stack<TreeNode> stack = new Stack<TreeNode>();
while (root!=null)
{
stack.Push(root);//用栈去保存暂时不需要,但将来会用到的节点
root = root.left;
}
while (stack.Count > 0)
{
root = stack.Pop();
list.Add(root.val);
root = root.right;//左边都遍历完了,现在遍历右边
while (root != null)
{
stack.Push(root);//右边的节点还有左节点
root = root.left;
}
}
return list;
}