二叉树的概念
二叉树是n个节点的有限集,它是空集,或者由一个根结点及两棵互不相交的分别称作这个根的左子树和右子树的二叉树组成。
二叉树不是树的特殊情况,且二叉树结点的子树要区分左子树和右子树,即使只有一个子树也要说明区分它是左子树和右子树。
完全二叉树:除底层之外所有层都是满的,而且最底层从左到右是连续的
满二叉树:每一层的结点都达到最大值
二叉树的遍历
遍历定义: 顺着某一条搜索路径 巡访二叉树中的结点,使得每个结点均被访问一次,而且仅被访问一次。
目的:得到所有结点的一个线性排列
用途:树结构插入,删除,修改,查找和排序运算的前提。
先序遍历:根->左->右
中序遍历:左->根->右
后序遍历:左->右->根
当我们编写二叉树遍历代码的时候,我们可以按照下边的步骤进行
1.确定递归函数的参数和返回值
2.确定终止条件
3.确定单层遍历的逻辑
前序遍历
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def preorderTraversal(self, root):
result = []
if root:
result.append(root.val)
result += self.preorderTraversal(root.left)
result += self.preorderTraversal(root.right)
return result
中序遍历
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def inorderTraversal(self, root):
result = []
"""
:type root: TreeNode
:rtype: List[int]
"""
def traversal(root):
if root:
traversal(root.left)
result.append(root.val)
traversal(root.right)
else:
return
traversal(root)
return result
后序遍历
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def postorderTraversal(self, root):
result = []
"""
:type root: TreeNode
:rtype: List[int]
"""
def traversal(root):
if root:
traversal(root.left)
traversal(root.right)
result.append(root.val)
else:
return
traversal(root)
return result