コード例 #1
0
ファイル: BinarySearchTree.py プロジェクト: mtran-code/CS2121
    def recursiveInsert(self, data, node):
        """
        uses recursion to find the appropriate node at which a data value should be added.
        :param data: desired data value to be added to the tree. (int)
        :param node: root node under which to add data value. (BinaryTreeNode)
        :return: None
        """

        if data < node.data:  # if insert data is less than current node data:
            if node.left is None:  # add the insert as the left child if it doesn't exist
                node.left = BinaryTreeNode(data)
            else:  # OR move to the left child and check again
                self.recursiveInsert(data, node.left)

        elif data >= node.data:  # if insert data is greater/equal to current node data:
            if node.right is None:  # add the insert as the right child if it doesn't exist
                node.right = BinaryTreeNode(data)
            else:  # OR move to the right child and check again
                self.recursiveInsert(data, node.right)
コード例 #2
0
ファイル: Q4_7.py プロジェクト: 0x0all/ctci
def main():
    root = BinaryTreeNode(10)
    root.setLeft(5)
    root.setRight(6)
    root.left.setLeft(1)
    root.left.setRight(2)
    root.right.setLeft(3)
    root.right.setRight(4)
    root.left.right.setLeft(7)

    # test case 1: node 7 and 6  --> Common ancestor: 10
    # test case 2: node 2 and 5 --> Common ancestor: 5
    # test case 3: node 6 and a node not in the tree  --> Common ancestor: None 
    tests = [(root.left.right.left, root.right), (root.left.right, root.left), (root.right, BinaryTreeNode(9))]
    methods = [commonAncestor_1, commonAncestor_2] 
    for test in tests:
        for method in methods:
            if method == commonAncestor_1:
                ancestor = method(test[0], test[1])
            else:
                ancestor = method(root, test[0], test[1])
            print ancestor.value if ancestor is not None else None
コード例 #3
0
def deSerialize(astr):
    if len(astr)==0:
        return None
    alist = astr.split(',', 1)
    num = alist[0]
    astr = str(alist[-1])
    root = None
    if num != '#':
        root = BinaryTreeNode.BinaryTreeNode(num)
        root.left,astr = deSerialize(astr)
        root.right,astr = deSerialize(astr)

    return root,astr
コード例 #4
0
ファイル: BinarySearchTree.py プロジェクト: mtran-code/CS2121
    def insert(self, data):
        """
        inserts a data value into the binary tree at an appropriate location.
        :param data: desired data value to be added to the tree. (int)
        :return: None
        """

        if self.root is None:  # if there is no root, set the data point as the new root
            self.root = BinaryTreeNode(data)

        else:
            self.recursiveInsert(data,
                                 self.root)  # recursive function to insert
        self.count += 1  # after adding, add one to node count
def Test1():
    pNode10 = BinaryTreeNode.BinaryTreeNode(10)
    pNode6 = BinaryTreeNode.BinaryTreeNode(6)
    pNode14 = BinaryTreeNode.BinaryTreeNode(14)
    pNode4 = BinaryTreeNode.BinaryTreeNode(4)
    pNode8 = BinaryTreeNode.BinaryTreeNode(8)
    pNode12 = BinaryTreeNode.BinaryTreeNode(12)
    pNode16 = BinaryTreeNode.BinaryTreeNode(16)

    pNode10.connectTreeNodes(pNode10, pNode6, pNode14)
    pNode6.connectTreeNodes(pNode6, pNode4, pNode8)
    pNode14.connectTreeNodes(pNode14, pNode12, pNode16)

    Test("test1", pNode10)
コード例 #6
0
def main():
    givenSum = 7
    root = BinaryTreeNode(1)
    root.setLeft(2)
    root.setRight(3)
    root.left.setLeft(4)
    root.left.setRight(5)
    root.right.setLeft(3)
    root.right.setRight(4)
    root.left.right.setLeft(7)

    findSum(root, givenSum)
コード例 #7
0
    def binary_tree_from_preorder_inorder_helper(preorder_start, preorder_end,
                                                 inorder_start, inorder_end):

        if preorder_end <= preorder_start or inorder_end <= inorder_start:
            return None

        root_inorder_idx = node_to_inorder_idx[preorder[preorder_start]]
        left_subtree_size = root_inorder_idx - inorder_start
        return BinaryTreeNode(
            preorder[preorder_start],
            # Recursively builds the left subtree.
            binary_tree_from_preorder_inorder_helper(
                preorder_start + 1, preorder_start + 1 + left_subtree_size,
                inorder_start, root_inorder_idx),
            # Recursively builds the right subtree.
            binary_tree_from_preorder_inorder_helper(
                preorder_start + 1 + left_subtree_size, preorder_end,
                root_inorder_idx + 1, inorder_end))
def Test1():
    pNode10 = BinaryTreeNode.BinaryTreeNode(10)
    pNode6 = BinaryTreeNode.BinaryTreeNode(6)
    pNode14 = BinaryTreeNode.BinaryTreeNode(14)
    pNode4 = BinaryTreeNode.BinaryTreeNode(4)
    pNode8 = BinaryTreeNode.BinaryTreeNode(8)
    pNode12 = BinaryTreeNode.BinaryTreeNode(12)
    pNode16 = BinaryTreeNode.BinaryTreeNode(16)

    pNode10.connectTreeNodes(pNode10, pNode6, pNode14)
    pNode6.connectTreeNodes(pNode6, pNode4, pNode8)
    pNode14.connectTreeNodes(pNode14, pNode12, pNode16)

    pNode10.printTree(pNode10)

    print("The nodes from top to bottom, from left to right are: \n")
    printTreeFromTop2(pNode10)
コード例 #9
0
def Test():
    pNode8 = BinaryTreeNode.BinaryTreeNode(8);
    pNode6 = BinaryTreeNode.BinaryTreeNode(6);
    pNode10 = BinaryTreeNode.BinaryTreeNode(10);
    pNode5 = BinaryTreeNode.BinaryTreeNode(5);
    pNode7 = BinaryTreeNode.BinaryTreeNode(7);
    pNode9 = BinaryTreeNode.BinaryTreeNode(9);
    pNode11 = BinaryTreeNode.BinaryTreeNode(11);

    pNode8.connectTreeNodes(pNode8, pNode6, pNode10);
    pNode6.connectTreeNodes(pNode6, pNode5, pNode7);
    pNode10.connectTreeNodes(pNode10, pNode9, pNode11);

    astr = serialize(pNode8)
    print(astr)
    root,astr = deSerialize(astr)
    root.printTree(root)
コード例 #10
0
def main():
    root = BinaryTreeNode(10)
    root.setLeft(5)
    root.setRight(6)
    root.left.setLeft(1)
    root.left.setRight(2)
    root.right.setLeft(3)
    root.right.setRight(4)
    root.left.right.setLeft(7)

    # test case 1: node 7 and 6  --> Common ancestor: 10
    # test case 2: node 2 and 5 --> Common ancestor: 5
    # test case 3: node 6 and a node not in the tree  --> Common ancestor: None
    tests = [(root.left.right.left, root.right), (root.left.right, root.left),
             (root.right, BinaryTreeNode(9))]
    methods = [commonAncestor_1, commonAncestor_2]
    for test in tests:
        for method in methods:
            if method == commonAncestor_1:
                ancestor = method(test[0], test[1])
            else:
                ancestor = method(root, test[0], test[1])
            print ancestor.value if ancestor is not None else None
コード例 #11
0
 def newNode(self, data):
     return btn.BinaryTreeNode(data)