给定一个二叉树,原地将它展开为链表。
例如,给定二叉树
1
/ \
2 5
/ \ \
3 4 6
将其展开为:
1
\
2
\
3
\
4
\
5
\
6
思路:
用一个栈,每个节点先压右节点 再压左节点 保证左边的先弹出来 弹出来的节点的右指针指向当前栈顶
public void flatten(TreeNode root) {
if (root==null) {
return ;
}
Stack<TreeNode> stack=new Stack<>();
stack.push(root);
while (!stack.isEmpty()) { //栈不空 弹出来元素作为根 先压其右孩子 再压其左孩子
TreeNode cur=stack.pop();
if (cur.right!=null) {
stack.push(cur.right);
}
if (cur.left!=null) {
stack.push(cur.left);
}
if (!stack.isEmpty()) {
cur.right=stack.peek();
}
cur.left=null; //左边指向null来满足题目的结构
}
}