二叉树的遍历

简介: 二叉树的遍历

1 二叉树遍历


树的遍历(也称为树的搜索)是图的遍历的一种,指的是按照某种规则,不重复地访问某种树的所有节点的过程。具体的访问操作可能是检查节点的值、更新节点的值等。不同的遍历方式,其访问节点的顺序是不一样的


  • 前序遍历
    “根->左->右”

    43.png

前序遍历:F, B, A, D, C, E, G, I, H.


  • 中序遍历
    “左->根->右”

    44.png

中序遍历:A, B, C, D, E, F, G, H, I.


  • 后序遍历
    “左->右->根”

    45.png

后序遍历:A, C, E, D, B, H, I, G, F.


  • 层次遍历

    46.png

层次遍历:F, B, G, A, D, I, C, E, H.


2 代码实现



class TreeNode(object):
    def __init__(self,value):
        self.value=value
        self.left=None
        self.right=None
    def insert(self,value):
        """
        二叉排序树添加节点
        """
        if self.value:
            if value <self.value:
                if self.left is None:
                    self.left=TreeNode(value)
                else:
                    self.left.insert(value)
            elif value>self.value:
                if self.right is None:
                    self.right=TreeNode(value)
                else:
                    self.right.insert(value)
        else:
            self.value=value
    def preTraversal(self,root):
        """
        前序遍历 root->left->right
        """
        res=[]
        if root:
            # print(root.value)
            res.append(root.value)
            res=res+self.preTraversal(root.left)
            res=res+self.preTraversal(root.right)
        return res
    def midTraversal(self,root):
        """
        中序遍历 left->root->right
        """
        res=[]
        if root:
            res=res+self.midTraversal(root.left)
            # print(root.value)
            res.append(root.value)
            res=res+self.midTraversal(root.right)
        return res
    def postTraversal(self,root):
        """
        后序遍历 left->right->root
        """
        res=[]
        if root:
            res=res+self.postTraversal(root.left)
            res=res+self.postTraversal(root.right)
            # print(root.value)
            res.append(root.value)
        return res
    def levelTraversel(self,root):
        res=[]
        if root is None:
            return 
        queue=[]
        queue.append(root)
        while queue:
            node=queue.pop(0)
            res.append(node.value)
            if node.left!=None:
                queue.append(node.left)    
            if node.right!=None:
                queue.append(node.right)
        return res
if __name__ == "__main__":
    root=TreeNode(27)
    root.insert(14)
    root.insert(35)
    root.insert(10)
    root.insert(19)
    root.insert(31)
    root.insert(42)
    print("前序遍历:")
    print(root.preTraversal(root))
    print("中序遍历:")
    print(root.midTraversal(root))
    print("后序遍历:")
    print(root.postTraversal(root))
    print("层次遍历:")
    print(root.levelTraversel(root))


47.png

输出结果:


前序遍历:
[27, 14, 10, 19, 35, 31, 42]
中序遍历:
[10, 14, 19, 27, 31, 35, 42]
后序遍历:
[10, 19, 14, 31, 42, 35, 27]
层次遍历:
[27, 14, 35, 10, 19, 31, 42]


相关文章
|
6月前
|
Python
二叉树前中后序遍历
这段内容是关于二叉树的前序、中序和后序遍历的Python实现。`Solution`类包含三个方法:`preorderTraversal`、`inorderTraversal`和`postorderTraversal`,分别返回二叉树节点值的前序、中序和后序遍历列表。每个方法都是递归的,遍历顺序为:前序(根-左-右)、中序(左-根-右)、后序(左-右-根)。
58 4
|
6月前
二叉树遍历及应用
二叉树遍历及应用
75 0
|
6月前
|
存储
详解二叉树的各种非递归遍历
详解二叉树的各种非递归遍历
|
6月前
|
算法
带你深入理解二叉树的遍历
带你深入理解二叉树的遍历
|
6月前
【二叉树遍历和练习】
【二叉树遍历和练习】
55 0
|
算法
25 二叉树的遍历
25 二叉树的遍历
28 0
|
存储
二叉树的遍历问题
二叉树的遍历问题