题目
给定一个二叉树,原地将它展开为链表。
题解
- 原地指结果可以覆盖输入,且额外空间限制在常数级别。
- 对于根节点,把右子树连到左子树的最右节点,再把左子树连到根的右子树(即覆盖右子树),当前节点的左孩子赋null;然后把根节点的右子树做当前节点,继续这么处理。
- 画图试试即可理解原理,大概就是把一个个节点的左孩子清成null。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public void flatten(TreeNode root) {
TreeNode pRoot=root;
while(pRoot!=null){
TreeNode lNode=pRoot.left;
if(lNode!=null){
while(lNode.right!=null){
lNode=lNode.right;
}
lNode.right=pRoot.right;
pRoot.right=pRoot.left;
pRoot.left=null;//
}
pRoot=pRoot.right;
}
}
}