Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建特定的二叉树?_Python_Python 3.x_Data Structures_Binary Tree - Fatal编程技术网

Python 如何创建特定的二叉树?

Python 如何创建特定的二叉树?,python,python-3.x,data-structures,binary-tree,Python,Python 3.x,Data Structures,Binary Tree,我刚刚实现了我的第一个二叉树: 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(

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

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
我很难理解你实际上是如何按照自己的规格建造一棵树的。例如,我尝试构建以下树:

然而,我真的很难理解/想象如何构建较低的节点并操纵它们的左/右分支

我想我可以做一些事情,比如:

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')
但我意识到这是荒谬的,因为我相信我正在为所有处于同一级别的字母创建一个唯一的节点?我从来没有真正设定一个人是另一个人的孩子(?)


如果有人能解释如何着手解决这个问题,并将类似问题可视化,我将不胜感激。

您的
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']