def insert(root, val):
    if not root:
        return Node(val)

    curr = root
    while curr:
        if val < curr.info:
            if curr.left:
                curr = curr.left
            else:
                curr.left = Node(val)
                break
        else:
            if curr.right:
                curr = curr.right
            else:
                curr.right = Node(val)
                break

    return root
from model_tree.node import Node


def lca(root, v1, v2):
    if root.info > max(v1, v2):
        return lca(root.left, v1, v2)
    elif root.info < min(v1, v2):
        return lca(root.right, v1, v2)
    else:
        return root


if True:
    root = Node(4, 2, 7, 1, 3, 5)
    v1 = 1
    v2 = 7

    result = lca(root, v1, v2)
    print("Result ", result.info)  # 4

if True:
    root = Node(10, 8, 12, 5, 9, 11, 16, None, None, None, None, None, None, 14, 18, 13, 15)
    v1 = 13
    v2 = 18

    result = lca(root, v1, v2)
    print("Result ", result.info)  # 16

if True:
    root = Node(50, 30, 51, 15, 32, None, None, 10, None, 31, 35, None, None, None, None, 34, 37, 33, 35)
    v1 = 33
from model_tree.node import Node


# linear solution
def preOrder(root):
    stack = [root]

    while len(stack) > 0:
        curr = stack.pop()

        print(curr.info, end=" ")
        if curr.right:
            stack.append(curr.right)

        if curr.left:
            stack.append(curr.left)


if True:
    root = Node(1, None, 2, None, 5, 3, 6, None, 4)

    preOrder(root)
    print()

if True:
    root = Node(1, 2, 3, 4, 5, 6, 7)

    preOrder(root)
    print()
from model_tree.node import Node


class Solution:
    def getHeight(self, root):
        if root is None:
            return -1

        return max(self.getHeight(root.left), self.getHeight(root.right)) + 1


if True:
    s = Solution()
    root = Node(3, 2, 5, 1, None, 4, 6, None, None, None, 7)
    res = s.getHeight(root)
    print("Result ", res)
def insert(root, val):
    if not root:
        return Node(val)

    curr = root
    while curr:
        if val < curr.info:
            if curr.left:
                curr = curr.left
            else:
                curr.left = Node(val)
                break
        else:
            if curr.right:
                curr = curr.right
            else:
                curr.right = Node(val)
                break

    return root


if True:
    root = Node(4, 2, 7, 1, 3)
    data = 6

    result = insert(root, data)
    print("Result ", result.showFlatTree())

    return dfs(root, minval, maxval)


def dfs(node, minval, maxval):
    if node is None:
        return True

    if node.info < minval or node.info > maxval:
        return False

    return dfs(node.left, minval, node.info - 1) and dfs(
        node.right, node.info + 1, maxval)


if True:
    root = Node(3, 5, 2, 1, 4, 6)  # False

    result = check_binary_search_tree_(root)
    print("Result ", result)

if True:
    root = Node(4, 2, 6, 1, 3, 5, 7)  # True

    result = check_binary_search_tree_(root)
    print("Result ", result)

if True:
    root = Node(7, 5, 9, 3, 6, 8, 12)  # True

    result = check_binary_search_tree_(root)
    print("Result ", result)
Esempio n. 7
0
from model_tree.node import Node


def height(root):
    if not root:
        return -1

    lh = height(root.left)
    rh = height(root.right)
    return max(lh, rh) + 1


if True:
    root = Node(1, None, 2, None, 5, 3, 6, None, 4)

    result = height(root)
    print("Result ", result)

if True:
    root = Node(3, 2, 5, 1, None, 4, 6, None, None, 7)

    result = height(root)
    print("Result ", result)
from model_tree.node import Node


def decodeHuff(root, s):
    ans = str()
    curr = root

    for i in s:
        if i == '0':
            curr = curr.left
        elif i == '1':
            curr = curr.right

        if not curr.left and not curr.right:
            ans += curr.info
            curr = root

    return ans


if True:
    root = Node('5', '2', 'A', 'B', 'C')
    s = '1001011'

    result = decodeHuff(root, s)
    print("Result ", result)