如何创建特定的二叉树?

3

我刚刚实现了我的第一个二叉树:

class BinaryTree:
    def __init__(self, obj):
        self.key = obj
        self.left_c = None
        self.right_c = None

    def insert_left_c(self, new_node):
        if self.left_c == None:
            self.left_c = BinaryTree(new_node)
        else:
            temp = BinaryTree(new_code)
            temp.left_c = self.left_c
            self.left_c = temp

    def insert_right_c(self, new_node):
        if self.right_c == None:
            self.right_c = BinaryTree(new_node)
        else:
            temp = BinaryTree(new_code)
            temp.right_c = self.right_c
            self.right_c = temp

    def set_root(self, obj):
        self.key = obj

    def get_root(self):
        return self.key

    def get_left_c(self):
        return self.left_c

    def get_right_c(self):
        return self.right_c

我很难理解如何按照自己的规格构建一棵树。例如,我正在尝试构建以下树:

enter image description here

然而,我真的很难理解/想象如何构建较低节点并操作它们的左/右分支。
我认为我可以做一些类似于:
binary_tree = BinaryTree('a')


binary_tree.insert_left_c('b')
binary_tree.insert_right_c('d')

binary_tree.insert_right_c('c')
binary_tree.insert_left_c('e')
binary_tree.insert_right_c('f')

但我意识到这是无意义的,因为我相信我正在为所有在同一级别上的字母创建一个独特的节点?我从未实际设置一个节点成为另一个节点的子节点(?)。
如果有人能够解释如何解决这个问题,并且可视化类似的问题,我会非常感激。

2
https://github.com/joowani/binarytree - G_M
1个回答

1
你的insert函数仅在根节点上操作,没有深入遍历树。通常,这样的函数会插入到二叉搜索树中,并根据要插入的值与当前树的根节点进行比较,递归地向左或向右移动。对于一般的二叉树,您需要传递一个明确的左/右方向列表来指定新值的位置。
更简单的方法是显式地构建树。从每个叶子节点开始建立单独的树,然后合并它们。
trees = {x: BinaryTree(x) for x in 'abcdef'}
binary_tree = trees['a']
binary_tree.left_c = trees['b']
binary_tree.right_c = trees['c']
trees['b'].right_c = trees['d']
trees['c'].left_c = trees['e']
trees['c'].right_c = trees['f']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接