【LEETCODE】116-Populating Next Right Pointers in Each Node

2101 ワード

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
タイトル:
ツリーにノードを次のように定義します.
# class TreeLinkNode(object): #     def __init__(self, x): #         self.val = x #         self.left = None #         self.right = None #         self.next = None
初期状態の場合、各ノードのnextポインタはnullを指す
得られるのは、各ノードが右側にノードがある場合、nextを指し示すことです.
右側にノードがない場合はnullを指します
注意:
定数レベルの余分なスペースしか使用できません
この木が完璧だと仮定すると、すべての葉の端点に同じレベルがあり、各ノードにはchildrenが2つあります.
参照先:
http://www.cnblogs.com/zuoyuan/p/3745170.html
http://www.cnblogs.com/felixfang/p/3647898.html
考え方:
# Definition for binary tree with next pointer.
# class TreeLinkNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#         self.next = None

class Solution(object):
    def connect(self, root):
        """
        :type root: TreeLinkNode
        :rtype: nothing
        """
        
        if root and root.left:
            root.left.next=root.right
            
            if root.next:
                root.right.next=root.next.left
            else:
                root.right.next=None
            
            self.connect(root.left)
            self.connect(root.right)