题目:
将一棵二叉树按照前序遍历拆解成为一个假链表
。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。
// version 2: Divide & Conquer
public class Solution {
public void flatten(TreeNode root) {
helper(root);
}
// flatten root and return the last node
private TreeNode helper(TreeNode root) {
if (root == null) {
return null;
}
TreeNode leftLast = helper(root.left);
TreeNode rightLast = helper(root.right);
// connect leftLast to root.right
if (leftLast != null) {
leftLast.right = root.right;//
root.right = root.left; //修改根的right指向左部分
root.left = null;
}
if (rightLast != null) {
return rightLast;
}
if (leftLast != null) {
return leftLast;
}
return root;
}
}