41: Binary Tree Inorder Traversal
/************************************************************************/
/* 41: Binary Tree Inorder Traversal */
/************************************************************************/
/*
* /*
* 应用1:
* 当二叉树已经是一棵 二查搜索树时,中序遍历后的结果就是升序排列的
* */
/****中序遍历 InOrder tree******************************************/
public List<Integer> inorderTraversal(TreeNode root)
{
List<Integer> source=new ArrayList<Integer>();
inorderTree(root,source);
return source;
}
private void inorderTree(TreeNode node,List<Integer> nodes)
{
if(node==null)
{
return;
}
//System.out.println("pre root-->"+node.val);
inorderTree(node.left,nodes);
System.out.println("-->"+node.val);
nodes.add(node.val);
inorderTree(node.right,nodes);
}
/****中序遍历 InOrder tree Time: O(n), Space: O(n)栈迭代方法实现的**********/
public List<Integer> inorderTraversal2(TreeNode root)
{
List<Integer> results=new ArrayList<Integer>();
Stack<TreeNode> stack=new Stack<TreeNode>();
TreeNode node=null;
node=root;
while(node!=null||!stack.isEmpty())
{
if(node!=null)
{
stack.push(node);
node=node.left;
}
else
{
node= stack.pop();
if(node!=null)
{
results.add(node.val);
//System.out.println("-->"+node.val);
}
node=node.right;
}
}
return results;
}