LeetCode 114 二叉树展开为链表

从题目的例子中看, 它是这样的一个转换过程:

1 左子树经过转换后放到父节点的右节点上

2 原来的右节点进行相同的转换, 然后接到 1 中的最后一个节点上去

还是一个递归的过程

除了过程中的判断有点繁琐之后, 思路上并不困难

  def flatten(root: TreeNode): Unit = {

    def go(node:TreeNode): TreeNode = {
      if(node == null) null
      else {
        val flattenLeft = go(node.left)
        val flattenRight = go(node.right)
        if(flattenLeft != null){  //如果转换后的左子树不为空
          node.left = null        //先去掉原来的左子树
          if(flattenRight == null) { // 如果本来没有右子树, 直接将转换后的左子树拼接上去
            node.right = flattenLeft
          } else {                    // 如果原来有右子树, 接上转换后的左子树
            node.right = flattenLeft
            var rightLast = flattenLeft
            while(rightLast.right != null){ // 找到左子树的最右节点
              rightLast = rightLast.right
            }
            rightLast.right = flattenRight //然后把转换后的右子树拼接到最右节点上
          }
        }

        node
      }
    }

    go(root)

  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值