114. 二叉树展开为链表

95 阅读1分钟

image.png 树转链表的题,这个是要求从根节点开始,那么这个题的思路就是要换成,左子树都是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;
};