树转链表的题,这个是要求从根节点开始,那么这个题的思路就是要换成,左子树都是null,从根节点开始都是右子树的样子,我们观察可以看到,右子树的第一个节点是在左子树的最后一个节点的右边,那么也就是说我们可以先找到左子树的最后一个右子节点,然后把右子树放到这个最后节点的右边,再把根节点的左子树挂到根节点的右子树上,左子树置空,随后移动从根节点到下一个右子节点,同时如果在某个节点其左子树是null,那么就可以继续往下一个节点移动,因为左子树为null是符合链表的要求的。
var flatten = function(root) {
var cur = root;
while(cur!== null) {
if (cur.left !== null) {
var l = cur.left;
while(l.right !== null) l=l.right;
l.right = cur.right;
cur.right = cur.left;
cur.left = null;
}
cur = cur.right;
}
return root;
};