算法笔记:二叉树,二叉搜索树笔记(python)

二叉树笔记
1.基本概念
(1)根节点
(2)叶节点
在这里插入图片描述如图,即为一个完整的树模型。

2.树、图、链表之间的关系
(1)链表是特殊化的树,例如一棵树只有左子节点,而没有右子节点;或者一棵树只有右子节点,而没有左子节点。如下图。
在这里插入图片描述(2)树是特殊的图,因为树是没有环状结构,如果树具有环状结构,则变成图。

3.二叉树,Python定义

class TreeNode:    
    def__init__(self,val):        
	self.val = val        
	self.left,self.right = None,None

4.二叉树的遍历(前中后序遍历)
(1)前序(Pre-order):根——左——右
(2)中序(In-order):左——根——右
(3)后续(Post-order):左——右——根

5.二叉树遍历,Python定义

#前序遍历
def preorder(self,root): 
    if root:
	self.traverse_path.append(root.val)
	self.preorder(root.left)
	self.preorder(root.right)
#中序遍历
def inorder(self,root):
    if root:
        self.inorder(root.left)
        self.traverse_path.append(root.val)
        self.inorder(root.right)
#后序遍历
def postorder(self,root):
    if root:
    self.postorder(root.left)
    self.postorder(root.right)
    self.traverse_path.append(root.val)

注:树的操作离不开递归,所以千万不要害怕递归,要拥抱递归!!

6.二叉搜索树 Binary Search Tree
二叉搜索树,也成有序二叉树(Ordered Binary Tree),排序二叉树(Sorted Binary Tree),是指一颗孔数或者具有下列性质的二叉树:
(1)左子树上所有节点的值均小于它的根节点的值;
(2)右子树上所有节点的值均大于它的根节点的值;
(3)以此类推,左、右子树也分别为二叉查找树。(这就是重复性!!

7.二叉查找树的操作
(1)查找:类似于二分查找
(2)插入:新建子节点
(3)删除
上述三种操作,最值得说一下的是删除操作:
①删除的节点是最末端的叶节点,那么直接删除即可,不会对数产生太大的影响。
②删除的节点下面还有子节点:
此时删除该节点会对于输的整体结构产生变化,需要在这个节点下面找到一个节点去代替当前节点,通常情况下是寻找该节点的右子树下的最小节点代替。
具体事例如下图,要删除值为65 的节点:
在这里插入图片描述
在这里插入图片描述
8.二叉搜索树的操作复杂度分析
在这里插入图片描述
由上图可见,二叉搜索树的操作复杂度一般为O(log(n)),在最坏的情况下(即退化为链表的情况下),其操作的复杂度将退化为O(n)。

原创文章 8 获赞 22 访问量 1821

猜你喜欢

转载自blog.csdn.net/yangbupang/article/details/105835490