Populating Next Right Pointers in Each Node --LeetCode

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指向了右孩子,而在第二层以后的右孩子会指向结点的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)



你可能感兴趣的:(LeetCode,python)