Populating Next Right Pointers in Each Node --LeetCode

1751 ワード

Populating Next Right Pointers in Each Node --LeetCode
タイトル:
Given a binary tree
    struct TreeLinkNode {
      TreeLinkNode *left;
      TreeLinkNode *right;
      TreeLinkNode *next;
    }

Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to  NULL .
Initially, all next pointers are set to  NULL .
Note:
You may only use constant extra space.
You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
For example, Given the following perfect binary tree,
         1
       /  \
      2    3
     / \  / \
    4  5  6  7

After calling your function, the tree should look like:
         1 -> NULL
       /  \
      2 -> 3 -> NULL
     / \  / \
    4->5->6->7 -> NULL

分析:
タイトルを見て、最初は広さ優先で検索しようと思ったのですが、
only use constant extra spaceでは、次の方法を使用します.
各ノードの左の子供のnextは右の子供を指し、2階以降の右の子供はノードのnextの左の子供を指していることがわかります.このような簡単な分析で、コードを書くことができます.
コード:
# Definition for a  binary tree node
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#         self.next = None

class Solution:
    # @param root, a tree node
    # @return nothing
    def connect(self, root):
      if root:
            if root.left:
                root.left.next = root.right
            if root.right:
                root.right.next= root.next.left if root.next else None
            self.connect(root.left)
            self.connect(root.right)