前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二叉树的遍历

二叉树的遍历

作者头像
致Great
发布2019-03-22 11:41:16
5400
发布2019-03-22 11:41:16
举报
文章被收录于专栏:程序生活程序生活

1 二叉树遍历

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

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

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

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

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

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

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

  • 层次遍历

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

2 代码实现

代码语言:javascript
复制
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))

输出结果:

代码语言:javascript
复制
前序遍历:
[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]
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.03.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 二叉树遍历
  • 2 代码实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档