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