def main(): t1 = produceTree(list(range(1, 56))) t2 = getRightMostNode(t1, 2) t2 = deepcopy(t2) # t2.right = None # if uncommented, both should return false, otherwise both will return true print(preOrderTraversal(t2) in preOrderTraversal(t1)) print(isSubtree(t1, t2))
def main(): tree = produceTree(list(range(1, 25))) printTree(tree) createParents(tree) print( firstCommonAncestor(tree.right.right, tree.right.left.left.left).data)
def main(): tree = produceTree(list(range(1, 8))) printTree(tree) # print(permutations(tree)) pprint(sequences(tree))
if tree == None: return True if abs(getHeight(tree.left) - getHeight(tree.right)) > 1: return False else: return checkBalanced(tree.left) and checkBalanced(tree.right) def checkHeight(tree): if tree == None: return -1 leftHeight = checkHeight(tree.left) if leftHeight == -2: return -2 rightHeight = checkHeight(tree.right) if rightHeight == -2: return -2 if abs(leftHeight - rightHeight) > 1: return -2 else: return max(checkHeight(tree.left), checkHeight(tree.right)) + 1 root = produceTree(list(range(1, 9))) print(checkHeight(root)) print(checkBalanced(root)) # True root.right = None print(checkBalanced(root)) # False
# Given a binary tree, design an algorithm which creates a list of all nodes at each depth from Ch42MinTree import produceTree from Chapter3Stacks import LinkedList def traverse(root): level = LinkedList() level.insert(root) levelNode = level.first # print(dir(levelNode.data)) level.printSelf() while levelNode != None: newLevel = LinkedList() node = levelNode while node != None and node.data != None: if node.data.left: newLevel.insert(node.data.left) if node.data.right: newLevel.insert(node.data.right) node = node.next newLevel.printSelf() levelNode = newLevel.first if __name__ == "__main__": root = produceTree([1,2,3,4,5,6,7,8]) traverse(root)