zoukankan      html  css  js  c++  java
  • 数据结构与算法 二叉树 排序二叉树

    二叉树

    • 根节点
    • 左叶子节点
    • 右叶子节点
    • 子树
    • 高度
    # 二叉树
    class Node():
        def __init__(self,item):
            self.item=item
            self.left=None
            self.right=None
    
    
    class Tree():
        # 创建一个空树
        def __init__(self):
            self.root=None
    
        def addNode(self,item):
            node=Node(item)
            # 如果是空树
            if self.root==None:
                self.root=node
                return
            # 二叉树不为空
            cur = self.root
            q=[cur]
            #队列中不断添加节点 拿出节点
            while q:
                n=q.pop(0)
                if n.left==None:
                    n.left=node
                    break
                else:
                    q.append(n.left)
    
                if n.right==None:
                    n.right=node
                    break
                else:
                    q.append(n.right)
    
        # 广度遍历
        def travel(self):
            cur=self.root
            q=[cur]
            while q:
                n=q.pop(0)
                print(n.item)
                if n.left!=None:
                    q.append(n.left)
                if n.right!=None:
                    q.append(n.right)
    
        # 深度遍历:前中后指的是根节点的位置
        # 前序:根左右
        def frontTravel(self,root):
            # 空
            if root==None:
                return
            print(root.item)
            self.frontTravel(root.left)
            self.frontTravel(root.right)
        # 中序:左根右
        def midTravel(self,root):
            if root==None:
                return
            self.midTravel(root.left)
            print(root.item)
            self.midTravel(root.right)
        # 后序:左右根
        def afterTravel(self,root):
            if root==None:
                return
            self.afterTravel(root.left)
            self.afterTravel(root.right)
            print(root.item)
    tree=Tree()
    tree.addNode(1)
    tree.addNode(2)
    tree.addNode(3)
    tree.addNode(4)
    tree.addNode(5)
    tree.addNode(6)
    tree.addNode(7)
    # tree.travel()
    tree.midTravel(tree.root)

    二叉树的遍历

    • 广度遍历:逐层遍历
    • 深度遍历:前中后指的是根节点的位置
      • 前序:根左右
      • 中序:左根右
      • 后序:左右根
     

    排序二叉树

    • 插入节点的准则:首先插入根节点。当插入其他节点的时候,需要和根节点做比较,比根节点小的节点插入树的左侧,大的插入树的右侧
    class Node():
        def __init__(self,item):
            self.item=item
            self.left=None
            self.right=None
    
    class SortTree():
        def __init__(self):
            self.root=None
    
        def midTravel(self,root):
            # print(111)
            if root==None:
                return
            # 左根右
            self.midTravel(root.left)
            print(root.item)
            self.midTravel(root.right)
    
        def insertNode(self,item):
            node=Node(item)
            cur=self.root
            if self.root == None:
    
                self.root=node
                return
            # 树非空
            while True:
                if cur.item>node.item:
                    if cur.left==None:
    
                        cur.left=node
                        break
                    else:
                        cur=cur.left
                else:
                    if cur.right==None:
    
                        cur.right=node
                        break
                    else:
                        cur=cur.right
    
    
    
    
    t = SortTree()
    t.insertNode(3)
    t.insertNode(8)
    t.insertNode(3)
    t.insertNode(1)
    t.insertNode(1)
    
    t.midTravel(t.root)
  • 相关阅读:
    基于Visual C++2013拆解世界五百强面试题--题13-找最大公共子字符串
    基于Visual C++2013拆解世界五百强面试题--题12-进制转换
    Color颜色对照表
    根据选择打开相应的程序
    复制一个5G文件只需要两秒,全网最牛方法!
    判断一个男人穷还是富,只看这几点!
    判断一个男人穷还是富,只看这几点!
    判断一个男人穷还是富,只看这几点!
    16年国庆假期期间兼职所悟
    16年国庆假期期间兼职所悟
  • 原文地址:https://www.cnblogs.com/XLHIT/p/11366241.html
Copyright © 2011-2022 走看看