Populating Next Right Pointers in Each Node --LeetCode
Populating Next Right Pointers in Each Node --LeetCode
タイトル:
Given a binary tree
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
Initially, all next pointers are set to
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,
After calling your function, the tree should look like:
分析:
タイトルを見て、最初は広さ優先で検索しようと思ったのですが、
only use constant extra spaceでは、次の方法を使用します.
各ノードの左の子供のnextは右の子供を指し、2階以降の右の子供はノードのnextの左の子供を指していることがわかります.このような簡単な分析で、コードを書くことができます.
コード:
タイトル:
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)