数据结构与算法 二叉树 排序二叉树

二叉树

  • 根节点
  • 左叶子节点
  • 右叶子节点
  • 子树
  • 高度
# 二叉树
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)

猜你喜欢

转载自www.cnblogs.com/XLHIT/p/11366241.html