zoukankan      html  css  js  c++  java
  • 二叉树

    1. 二叉树的基本概念:

      在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆

     

     2.二叉树的遍历方式:

    # 定义节点类
    class Node():
        def __init__(self,item):
            self.item = item
            self.left = None  # 左叶子节点
            self.right = None  # 右叶子节点
    
    # 定义二叉树类
    class Terr():
        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:
                nd = q.pop(0)
                if nd.left == None:
                    nd.left = node
                    return
                else:
                    q.append(nd.left)
                if nd.right == None:
                    nd.right = node
                    return
                else:
                    q.append(nd.right)
    # 使用                
    tree = Terr()
    for i in range(1, 8):
        tree.addNode(i)

    1.广度优先遍历

     def travel(self):
            cur = self.root
            q = [cur]
            while q:
                nd = q.pop(0)
                print(nd.item)
                if nd.left:
                    q.append(nd.left)
                if nd.right:
                    q.append(nd.right)

    2.深度优先遍历

    前序

    # 跟左右
        def forwoar(self,root):
            if root == None:
                return
            print(root.item)
            self.forwoar(root.left)
            self.forwoar(root.right)

    中序

    # 左跟右
    
        def niddle(self, root):
            if root == None:
                return
            self.niddle(root.left)
            print(root.item)
            self.niddle(root.right)

    后序

    # 左右跟
        def back(self,root):
            if root == None:
                return
            self.back(root.left)
            self.back(root.right)
            print(root.item)

    3.排序二叉树

    # 定义节点类
    class Node():
        def __init__(self,item):
            self.item = item
            self.left = None
            self.right = None
    # 定义排序二叉树类
    class SortTree():
        def __init__(self):
            self.root = None
        # 重点:添加新节点
        def add(self,item):
            node = Node(item)
            cur = self.root
            # 二叉树还没有节点的情况
            if self.root == None:
                self.root = node
                return
            '''
            二叉树有节点时循环比较当前节点的值与需要插入的节点的值的大小:
                1.比当前节点值大,向右侧插入,并判断当前右侧是否为空,不是则cur = cur.right 
                2.比当前节点值小,向左侧插入,并判断当前左侧是否为空,不是则cur = cur.left 
                3.循环直到找到左侧或右侧满足条件的某个空位置结束,调出循环
            '''
            while cur:
                #向右侧插入
                if item > cur.item:
                    if cur.right == None:
                        cur.right = node
                        break
                    else:
                        cur = cur.right
    
                else:#向左插入
                    if cur.left == None:
                        cur.left = node
                        break
                    else:
                        cur = cur.left
        # 使用中序的方法来获取有序二叉树的各个节点的值
        def middle(self,root):#前序:左根右
            if root == None:
                return
            self.middle(root.left)
            print(root.item)
            self.middle(root.right)

    待续:

  • 相关阅读:
    nested exception is java.io.FileNotFoundException: class path resource [spring-mybatis.xml] cannot be opened
    jdbc批量插入实现大批量数据快速插入
    setInterval设置停止和循环
    在java中使用dom4j解析xml(示例代码)
    获取请求端的ip地址
    行为型之责任链模式
    行为型之策略模式
    行为型之命令模式
    行为型之模板方法模式
    结构型之门面模式
  • 原文地址:https://www.cnblogs.com/zangyue/p/12098626.html
Copyright © 2011-2022 走看看