首先 二叉树的种类 :
分为 满二叉树和 完全二叉树
满二叉树:如果一棵二叉树的结点要么是叶子结点,要么它有两个子结点,这样的树就是满二叉树。
完全二叉树:除了最后一层的节点可能没有填满外,其余每层节点但都达到了最大值。并且最后一层的节点都集中在当层的最左边的若干位置
二叉搜索树:
1.是一个有序树
2. 如果左子树不为空,那么左子树所有节点的值全部小于根节点的值
3.如果右子树不空,那么右子树所有结点的值全部大于根节点的值
平衡二叉树:
又叫做AVL(Adelson-Velsky and Landis),特性:要么是一棵空树或者他的左右子树的两个高度差的绝对值不超过1,并且左右两个子树都是一颗平衡二叉树。
二叉树的三种遍历方式:
前序遍历:中左右
中序遍历: 左右中
后序遍历: 左右中
建议做题:Leetcode前序遍历 中序遍历 后序遍历
力扣(前序)
力扣(中序)
力扣(后序)
代码:
#
# @lc app=leetcode.cn id=144 lang=python3
#
# [144] 二叉树的前序遍历
#
# @lc code=start
# Definition for a binary tree node.
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
from typing import Optional,List
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
def preorder(root:int)->int:
if not root:
return
res.append(root.val)#根
preorder(root.left)#左
preorder(root.right)#右
preorder(root)#开始递归
return res #返回结果
# @lc code=end
--------------------------------------------------
中序
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
def inorder(root):
if not root:
return None
inorder(root.left)
res.append(root.val)
inorder(root.right)
inorder(root)
return res
--------------------------------------------------
后序
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
from typing import Optional
class Solution:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
res = []
def postorder(root):
if not root:
return None
postorder(root.left)#左
postorder(root.right)#右
res.append(root.val)#根
postorder(root)
return res
总结:
二叉树有着递归和迭代两种写法
迭代暂时没有完全掌握,递归比较直接明了,但是迭代也是需要掌握的 继续加油