美文网首页
116. Populating Next Right Point

116. Populating Next Right Point

作者: sarto | 来源:发表于2022-06-27 10:54 被阅读0次

    题目

    给定一个完美二叉树,所有子节点都有相同的层级,并且每个父节点都有两个子节点。将同一层级上的节点按从左到右的顺序连接起来。


    image.png

    解析

    如果以递归的方式解决这个问题

    1. 当我们传入 1 节点
    2. 连接 1 节点的子节点 23
    3. 递归 23 节点

    2,3 节点开始,左右子树分割成了两个不想干的子树,导致 56 节点无法连接在一起。基于次,我们设计另一个递归函数,这个递归函数接受两个节点 23。然后仅连接 5,6。并且继续传入 56

    递归函数可以写成
    f(node) = f(node.left) + f(node.right) + f2(node.left, node.right)

    伪代码

    f(node)

    node.left.next = node.right
    f(node.left)
    f(node.right)
    f2(node.left, node.right)
    

    f2(left, right)

    left.right.next = right.left
    f2(left.right. right.left)
    

    代码

    func connect(root *Node) *Node {
        if root == nil {
            return root
        }
        f(root)
        return root
    }
    
    func f(node *Node) {
        if node.Left == nil {
            return
        }
        node.Left.Next = node.Right
        f(node.Left)
        f(node.Right)
        f2(node.Left, node.Right)
    }
    
    func f2(left *Node, right *Node) {
        if left.Right == nil {
            return
        }
        left.Right.Next = right.Left
        f2(left.Right, right.Left)
    }
    

    相关文章

      网友评论

          本文标题:116. Populating Next Right Point

          本文链接:https://www.haomeiwen.com/subject/kbynvrtx.html