目录
1. 建立二叉树,同时使用中序(inorder)打印:
2. 使用前序(preorder)遍历打印二叉树:
3. 使用后序(postorder)遍历打印二叉树:
4. 计算二叉树的最大深度:
5. 计算二叉树的最小深度:
6. 将已排序数组转成二叉搜索树(binary search tree,BST),并用中序打印:
7. 将未排序数组转成二叉搜索树(BST),并用中序打印:
8. 求某个二叉树的路径数值和是否等于特定值:
9. 判断二叉树是否中心对称,或称为镜像(mirror):
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。
遍历过程可以简写为:LDR;
class treenode():
def __init__(self, val=None):
self.val = val
self.left = None
self.right = None
def inorder(self):
#中序打印
if self.left:
#如果左节点存在,递归调用下一层
self.left.inorder()
print(self.val)
if self.right:
#如果右节点存在,递归调用下一层
self.right.inorder()
def insertlist(data, root ,i ,n):
if i
代码解析:
上述的insertlist()函数是一个递归函数,这个这个程序的关键,这个函数所传递的参数有四个:
- data:要建立的二叉树列表;
- root:目前的二叉树的根节点;
- i:要建立的二叉树节点的列表数据索引;
- n:列表数据的长度;
其实递归调用在程序内部就是一个堆栈调用,这里我就不展开说明了。
前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根节点,然后遍历左子树,最后遍历右子树。
遍历过程可以简写为:DLR;
# 使用前序(preorder)遍历打印二叉树-------------------------------------------------------------
class treenode():
def __init__(self, val=None):
self.val = val
self.left = None
self.right =None
def insert(self, val):
if self.val:
if val < self.val:
if self.left:
self.left.insert(val)
else:
self.left = treenode(val)
else:
if self.right:
self.right.insert(val)
else:
self.right = treenode(val)
else:
self.val = val
def preorder(self):
print(self.val)
if self.left:
self.left.preorder()
if self.right:
self.right.preorder()
tree = treenode()
datas = [10, 21, 5, 9, 13, 28]
for d in datas:
tree.insert(d)
tree.preorder()
后序遍历首先遍历左子树,然后遍历右子树,最后访问根结点,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后遍历根结点。
遍历过程可以简写为:LRD;
class treenode():
def __init__(self, val=None):
self.val = val
self.left = None
self.right =None
def insert(self, val):
if self.val:
if val < self.val:
if self.left:
self.left.insert(val)
else:
self.left = treenode(val)
else:
if self.right:
self.right.insert(val)
else:
self.right = treenode(val)
else:
self.val = val
def postorder(self):
if self.left:
self.left.postorder()
if self.right:
self.right.postorder()
print(self.val)
tree = treenode()
datas = [10, 21, 5, 9, 13, 28]
for d in datas:
tree.insert(d)
tree.postorder()
#计算二叉树的最大深度-------------------------------------------------------------
class treenode():
def __init__(self, val=None):
self.val = val
self.left = None
self.right =None
def insertlist(data, root, i, n):
if i
#计算二叉树的最小深度-------------------------------------------------------------
class treenode():
def __init__(self, val=None):
self.val = val
self.left = None
self.right =None
def insertlist(data, root, i, n):
if i
二叉搜索树:即所有的左子树的值皆小于根节点的值,所有右节点的值皆大于根节点的值;
class treenode():
def __init__(self, val=None):
self.val = val
self.left = None
self.right = None
def inorder(self):
if self.left:
self.left.inorder()
print(self.val)
if self.right:
self.right.inorder()
def sortedarraytobst(nums):
if not nums:
return None
mid = len(nums)//2
root = treenode(nums[mid])
root.left = sortedarraytobst(nums[:mid])
root.right = sortedarraytobst(nums[mid+1:])
return root
data = [-10, -3, 0, 5, 9]
bst = sortedarraytobst(data)
bst.inorder()
#将未排序数组转成二叉搜索树-------------------------------------------------------------
class treenode():
def __init__(self, val=None):
self.val = val
self.left = None
self.right = None
def insert(self, val):
if self.val:
if val < self.val:
if self.left:
self.left.insert(val)
else:
self.left = treenode(val)
else:
if self.right:
self.right.insert(val)
else:
self.right = treenode(val)
else:
self.val = val
def arraytobst(self, nums):
root = treenode()
for n in nums:
root.insert(n)
return root
def inorder(self):
if self.left:
self.left.inorder()
print(self.val)
if self.right:
self.right.inorder()
tree = treenode()
datas = [10, 21, 5, 9, 13, 28]
tree = tree.arraytobst(datas)
tree.inorder()
class treenode():
def __init__(self, val=None):
self.val = val
self.left = None
self.right =None
def insertlist(data, root, i, n):
if i
代码解析:
这个程序的基本概念是,如果底下有子节点,sum就减去此节点值,进入递归;如果没有子节点,则比较目前节点值是不是等于最后sum的值,然后回传逻辑值。
#判断二叉树是否中心对称,或称为镜像(mirror)-----------------------------
class treenode():
def __init__(self, val=None):
self.val = val
self.left = None
self.right =None
def insertlist(data, root, i, n):
if i
https://blog.csdn.net/weixin_53919192/category_11761989.htmlhttps://blog.csdn.net/weixin_53919192/category_11761989.html