二叉树的遍历

简介: 二叉树的遍历

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]


相关文章
|
7月前
|
存储 算法 编译器
技术经验解读:二叉树的遍历:先序中序后序遍历的递归与非递归实现及层序遍历
技术经验解读:二叉树的遍历:先序中序后序遍历的递归与非递归实现及层序遍历
48 0
|
8月前
|
算法
带你深入理解二叉树的遍历
带你深入理解二叉树的遍历
|
8月前
|
存储 算法 前端开发
589. N 叉树的前序遍历
589. N 叉树的前序遍历
37 0
|
算法
25 二叉树的遍历
25 二叉树的遍历
37 0
剑指offer 58. 二叉搜索树的第k个结点
剑指offer 58. 二叉搜索树的第k个结点
59 0
|
存储
二叉树的遍历问题
二叉树的遍历问题
|
C++
【C++】二叉树的遍历:前序、中序、后序、层序
【C++】二叉树的遍历:前序、中序、后序、层序
227 0
|
开发工具
15分钟精通二叉树,二叉树的先序,中序,后序,层次遍历顺序
🍀🍀🍀理解,掌握二叉树先序,中序,后序,层次四种遍历顺序
188 0
15分钟精通二叉树,二叉树的先序,中序,后序,层次遍历顺序
【小白学算法】8.二叉树的遍历,前序、中序和后序
【小白学算法】8.二叉树的遍历,前序、中序和后序
【小白学算法】8.二叉树的遍历,前序、中序和后序

热门文章

最新文章

下一篇
开通oss服务