二叉树的前序遍历-力扣
二叉树的中序遍历-力扣
二叉树的后序遍历-力扣
基础知识
- 满二叉树: 只有度为0和度为2的结点,结点伸出去的枝丫数就是度,层高k,奇点数2^k-1。
- 完全二叉树:层高h,最后一层结点数1~2^(h-1),最后一层优先左子树满结点。
- 二叉搜索树:左孩子结点小于根节点,右孩子结点大于根节点
- 平衡二叉搜索树:左子树与右子树层高差值的绝对值小于等于1,且都是二叉搜索数
- 深度优先遍历:前序、中序、后序遍历,指的中间结点位置;递归,可用栈实现。
- 前序:中左右
- 中序:左中右
- 后序:左右中
- 广度优先遍历:层序遍历,用队列。
递归
- 递归三要素
- 确定递归函数的参数和返回值
- 确定终止条件
- 确定单层递归的逻辑
二叉树的前序遍历
单层递归的逻辑:中左右
终止条件:if cur==None:return
递归需要的参数和返回值:root结点,存结果的数组res
# 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:
def preorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
#异常处理
if root==None:
return []
res=[]
self.traversal(root,res)
return res
def traversal(self,root,res):
if root==None:
return;
res.append(root.val)
self.traversal(root.left,res)
self.traversal(root.right,res)
二叉树的中序遍历
单层递归的逻辑:左中右
# 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:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if root==None:
return []
res=[]
self.traversal(root,res)
return res
def traversal(self,root,res):
#终止条件
if root==None:
return
#左中右
self.traversal(root.left,res)
res.append(root.val)
self.traversal(root.right,res)
二叉树的后序遍历
单层逻辑:左右中
# 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:
def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
if root==None:
return []
res=[]
self.traversal(root,res)
return res
def traversal(self,root,res):
if root==None:
return
#左右中
self.traversal(root.left,res)
self.traversal(root.right,res)
res.append(root.val)