zoukankan      html  css  js  c++  java
  • 116. 填充每个节点的下一个右侧节点指针 二叉树 逆序BFS O(n)/ 利用 father.next遍历下层节点 O(1)

    思路:

      法1. 本题逆序BFS,从右到左记录每一个level的visited, 但是这样就用了O(n)的额外空间

      法2.  官答

        1) 左子节点永远指向右子节点

        2)右子节点指向 None或者 父节点相邻节点的左子节点

          if fatherNode.next:  fatherNode.right.next = fatherNode.next.left

    难点:

      1)本题没想到的地方就是,利用上层节点.next的操作,能遍历完整的下层节点,这样就完成对右节点.next的赋值

    代码:

    """
    # Definition for a Node.
    class Node:
        def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None):
            self.val = val
            self.left = left
            self.right = right
            self.next = next
    """
    法1)
    class Solution:
        def connect(self, root: 'Node') -> 'Node':
            visited = []
            def helper(node,level):
                if not node:
                    return 
                if len(visited) == level:
                    visited.append([])
                    node.next = None
                else:
                    node.next = visited[level][0]
                    visited[level].pop()
                visited[level].append(node)
                helper(node.right,level+1)
                helper(node.left,level+1)
            helper(root,0)
            return root            

    法2) 

    class Solution:
        def connect(self, root: 'Node') -> 'Node':
            if not root:
                return root

            leftMost = root
            while leftMost.left:
                point = leftMost
                while point:
                    # 对某节点,连接其左右子节点
                    point.left.next = point.right
                    # 如果其右边还有节点
                    if point.next:
                        point.right.next = point.next.left
                    else:
                        point.right.next = None
                    point = point.next

                leftMost=leftMost.left
            return root
  • 相关阅读:
    centos vps 安装socks5服务
    C#解析Json的类
    C# MD5 SHA1 SHA256 SHA384 SHA512 示例 标准版 专业版 旗舰版
    SunOS 4上MySQL详尽事变
    Solaris 2.7上MySQL 属意事故
    MySQL字符串
    MySQL安设布局
    运用PerlDBI/DBD接口的成绩
    MySQL 支撑的利用体系
    使用MySQL哪个版本
  • 原文地址:https://www.cnblogs.com/ChevisZhang/p/12915931.html
Copyright © 2011-2022 走看看