leetcode

每个节点的右向指针

2018-09-11  本文已影响6人  momo1023

给定一个二叉树

struct TreeLinkNode {
  TreeLinkNode *left;
  TreeLinkNode *right;
  TreeLinkNode *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。

说明:
你只能使用额外常数空间。
使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。
你可以假设它是一个完美二叉树(即所有叶子节点都在同一层,每个父节点都有两个子节点)。

给定完美二叉树,

     1
   /  \
  2    3
 / \  / \
4  5  6  7
调用你的函数后,该完美二叉树变为:

     1 -> NULL
   /  \
  2 -> 3 -> NULL
 / \  / \
4->5->6->7 -> NULL
# Definition for binary tree with next pointer.
# class TreeLinkNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#         self.next = None

class Solution:
    # @param root, a tree link node
    # @return nothing
    def connect(self, root):
        if root is None:
            return root
        node = [root]
        while node:
            temp = []
            for p in node:
                if p:
                    if p.left:
                        temp.append(p.left)
                    if p.right:
                        temp.append(p.right)
            l = len(node)
            for i in range(0, l - 1):
                node[i].next = node[i+1]
            node = temp
上一篇下一篇

猜你喜欢

热点阅读