Given a binary tree, flatten it to a linked list in-place.
将二叉树变成扁平的,类似于LinkedList的只有右子树的线性链表
基本思路:这不是前序遍历么,将节点存入list中,然后重新构建一个右子树。这就简单了。
public void flatten(TreeNode root) {
Stack<TreeNode> stack=new Stack<TreeNode>();
List<TreeNode> list=new LinkedList<TreeNode>();
TreeNode current=root;
int i=0;
while(!stack.isEmpty()||current!=null)//前序遍历节点存入list中
{
if(current!=null)
{
stack.push(current);
list.add(current);
current=current.left;
}else
{
current=stack.pop();
current=current.right;
}
}
current=root;//将list中的节点重新构建右子树,注意之前的链接还在,所以构建的时候,要将左孩子清空。
i=1;
while(i<list.size())
{
current.left=null;
current.right=list.get(i);
current=current.right;
i++;
}
}