예제 #1
0
def insert(node, key):
    q = [node]
    while q:  # level order
        x = q.pop(0)
        if not x.left:
            x.left = Node(key)
            break
        else:
            q.append(x.left)
        if not x.right:
            x.right = Node(key)
            break
        else:
            q.append(x.right)
예제 #2
0
def solution(root, low, high):
    if not root:
        return
    level = 1
    marker = Node(None)
    queue = [root, marker]
    while queue:
        node = queue.pop(0)
        if node == marker:
            if level >= low:
                print()
            level += 1
            if not queue or level > high:
                break
            queue.append(marker)
            continue
        if level >= low:
            print(node.val, end=' ')
        if node.left:
            queue.append(node.left)
        if node.right:
            queue.append(node.right)
예제 #3
0
from geeksforgeeks.datastructure.binary_tree.binary_tree import Node


def sum_of_all_nodes(root):
    if not root:
        return 0
    return root.val + sum_of_all_nodes(root.left) + sum_of_all_nodes(
        root.right)


tree = Node(8)
tree.left = Node(3)
tree.right = Node(10)
tree.left.left = Node(1)
tree.left.right = Node(6)
tree.right.right = Node(14)
tree.right.right.left = Node(13)
tree.left.right.left = Node(4)
tree.left.right.right = Node(7)
print(sum_of_all_nodes(tree))
예제 #4
0
# bfs = level order
from geeksforgeeks.datastructure.binary_tree.binary_tree import Node


def bfs(node):
    q = [node]
    while q:
        x = q.pop(0)
        print(x.val, end=' ')
        if x.left:
            q.append(x.left)
        if x.right:
            q.append(x.right)


root = Node(1)
root.left = Node(2)
root.left.left = Node(4)
root.left.right = Node(5)
root.right = Node(3)
bfs(root)
예제 #5
0
    if lvl == 1:
        print(node.val, end=' ')
        return
    print_level(node.left, lvl - 1)
    print_level(node.right, lvl - 1)


def reverse_level_order_stack(root):
    s, q = [], [root]
    while q:
        node = q.pop(0)
        s.append(node)
        if node.right:
            q.append(node.right)
        if node.left:
            q.append(node.left)
    while s:
        print(s.pop().val, end=' ')


tree = Node(1)
tree.left = Node(2)
tree.right = Node(3)
tree.left.left = Node(4)
tree.left.right = Node(5)
tree.right.left = Node(6)
tree.right.right = Node(7)
reverse_level_order(tree)
print()
reverse_level_order_stack(tree)
예제 #6
0

def boundary_right(node):
    if not node:
        return
    if node.right:
        print(node.val, end=' ')
        boundary_right(node.right)
    elif node.left:
        print(node.val, end=' ')
        boundary_right(node.left)


def print_leaves(node):
    if node:
        print_leaves(node.left)
        if not node.left and not node.right:
            print(node.val, end=' ')
        print_leaves(node.right)


tree = Node(20)
tree.left = Node(8)
tree.left.left = Node(4)
tree.left.right = Node(12)
tree.left.right.left = Node(10)
tree.left.right.right = Node(14)
tree.right = Node(22)
tree.right.right = Node(25)
boundary_traversal(tree)
예제 #7
0
    print(node.val, end=' ')
    inorder(node.right)


def insert(node, key):
    q = [node]
    while q:  # level order
        x = q.pop(0)
        if not x.left:
            x.left = Node(key)
            break
        else:
            q.append(x.left)
        if not x.right:
            x.right = Node(key)
            break
        else:
            q.append(x.right)


root = Node(10)
root.left = Node(11)
root.left.left = Node(7)
root.right = Node(9)
root.right.left = Node(15)
root.right.right = Node(8)
inorder(root)
insert(root, 12)
print()
inorder(root)