11.二叉树

python实现二叉树的数据结构:

  . 二叉树的排序方式:

    - 广度遍历(层次遍历)

    - 深度遍历:
      - 前序(根左右):把根放到最前面
      - 中序(左根右):把根放到中间
      - 后序(左右根):把根放到最后

class Node():
    def __init__(self,item):
        self.item = item
        self.right = None
        self.left = None
class Tree():
    def __init__(self):
        self.root = None
    def add(self,item):
        node = Node(item)
        if self.root is None:
            self.root = node
            return
        else:
            queue = [self.root]
            while queue:
                cur = queue.pop(0)
                if cur.left is None:
                    cur.left = node
                    return
                else:
                    queue.append(cur.left)
                if cur.right is None:
                    cur.right = node
                    return
                else:
                    queue.append(cur.right)
    #广度遍历
    def travel(self):
        if self.root is None:
            print(‘‘)
            return
        else:
            queue = [self.root]
            while queue:
                cur = queue.pop(0)
                print(cur.item)
                if cur.left is not None:
                    queue.append(cur.left)
                if cur.right is not None:
                    queue.append(cur.right)

    #深度遍历:前序,中序,后序遍历
    def forwordTravel(self,root):
        if root is None:
            return
        print(root.item,end=‘ ‘)
        self.forwordTravel(root.left)
        self.forwordTravel(root.right)

    def middleTravel(self,root):
        if root is None:
            return
        self.middleTravel(root.left)
        print(root.item,end=‘ ‘)
        self.middleTravel(root.right)

    def backTravel(self,root):
        if root is None:
            return
        self.backTravel(root.left)
        self.backTravel(root.right)
        print(root.item,end=‘ ‘)

tree = Tree()
tree.add(‘0‘)
tree.add(‘1‘)
tree.add(‘2‘)
tree.add(‘3‘)
tree.add(‘4‘)
tree.add(‘5‘)
tree.add(‘6‘)
tree.add(‘7‘)
tree.add(‘8‘)
tree.add(‘9‘)

tree.travel()
tree.forwordTravel(tree.root)
print(‘\n‘)
tree.backTravel(tree.root)
print(‘\n‘)
tree.middleTravel(tree.root)
print(‘\n‘)

python实现排序二叉树:

#排序二叉树
class Node():
    def __init__(self,item):
        self.item = item
        self.left = None
        self.right = None
class Tree():
    def __init__(self):
        self.root = None
    def insert(self,item):
        node = Node(item)
        cur = self.root
        if cur is None:
            self.root = node
            return
        while True:
            if item < cur.item:
                if cur.left is None:
                    cur.left = node
                    return
                else:
                    cur = cur.left
            else:
                if cur.right is None:
                    cur.right = node
                    return
                else:
                    cur = cur.right
    def preTravel(self,root):
        if root is None:
            return
        print(root.item,end=‘ ‘)
        self.preTravel(root.left)
        self.preTravel(root.right)
    def middleTravel(self,root):
        if root is None:
            return
        self.middleTravel(root.left)
        print(root.item,end=‘ ‘)
        self.middleTravel(root.right)
    def backTravel(self,root):
        if root is None:
            return
        self.backTravel(root.left)
        self.backTravel(root.right)
        print(root.item,end=‘ ‘)

tree = Tree()
tree.insert(3)
tree.insert(8)
tree.insert(5)
tree.insert(7)
tree.insert(6)
tree.preTravel(tree.root)
print(‘\n‘)
tree.middleTravel(tree.root)
print(‘\n‘)
tree.backTravel(tree.root)
print(‘\n‘)

原文地址:https://www.cnblogs.com/bobo-zhang/p/10856009.html

时间: 2024-08-07 02:52:18

11.二叉树的相关文章

研磨数据结构与算法-11二叉树的基本操作

节点: /* * 二叉树节点 */ public class Node { //数据项 public long data; //数据项 public String sData; //左子节点 public Node leftChild; //右子节点 public Node rightChild; /** * 构造方法 * @param data */ public Node(long data,String sData) { this.data = data; this.sData = sDa

11.二叉树基本理论

一.二叉树基本概念 1.定义 二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(或称空二叉树),或者由一个根节点和两颗互不相交的.分别称为根结点的左子树和右子树的二叉树组成. 2.二叉树特点 (1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点; (2)左子树和右子树是有顺序的,次序不能任意颠倒; (3)即使树中某节点只有一颗子树,也要区分它是左子树还是右子树. 另外,二叉树具有五种基本形态: a.空二叉树;b.只有一个根结点;c.根结点只有左子树;d

Solution 11: 二叉树中节点的最大距离

问题描述 RT. 如果把二叉树看做是一张图,父子节点的连线看成是双向的,距离的定义为两个节点之间变得数目. 解决思路 求根节点的左子树的高度和右子树的高度,相加. 程序 public class MaxDistanceInTree { public int getMaxDistanceInTree(TreeNode root) { if (root == null) { return 0; } int leftHeight = getHeightOfTree(root.left); int ri

C语言实现有序二叉树(1)

在cpp中使用的C语言 头文件 1 /* 有序二叉树 BsTree */ 2 #ifndef _BT_H 3 #define _BT_H 4 /*节点*/ 5 typedef struct BsTreeNode 6 { 7 int data;/* 数据 */ 8 struct BsTreeNode* left;/* 左子树 */ 9 struct BsTreeNode* right;/* 右子树 */ 10 }BSTREE_NODE; 11 /* 二叉树 */ 12 typedef struct

二叉树常见遍历算法

这几天在复习关于树的各种算法,做了一些题,也搜索了网上各种算法,现在来总结一下树的各种常见算法.本文涵盖: 二叉树先中后序遍历(递归&非递归)算法 层次遍历(正序&逆序&锯齿形)非递归算法 二叉树深度算法 结点总数算法 1.二叉树先序非递归遍历 //先序非递归遍历 public ArrayList<Integer> preorderTraversal2(TreeNode root) { Stack<TreeNode> stack = new Stack<

定义和实现二叉树

/* 1.节点:节点包含一个数据元素和若干点到其子树分支 2.度节点:节点的数目已成为节点的子树 3.叶节点:为0的节点称为叶结点 4.分支节点:度不为0的节点称为分支节点 5.树的度:树中全部节点的度的最大值 6.二叉树:是n(n>=0)个有限节点构成的集合.n=0的树称为空二叉树.n=1的树仅仅有一个根结点: n〉1的二叉树由一个根节点和至多两个互不相交的,分别称为左子树和右子树的子二叉树构成 二叉树不是有序树,这是由于,二叉树中某个节点即使仅仅有一个子树也要区分是左子树还是右子树: 而对于

二叉树的定义和实现

/* 1.节点:节点包括一个数据元素及若干指向其子树的分支 2.节点的度:节点所拥有的子树的个数成为该节点的度 3.叶节点:度为0的节点称为叶结点 4.分支节点:度不为0的节点称为分支节点 5.树的度:树中所有节点的度的最大值 6.二叉树:是n(n>=0)个有限节点构成的集合.n=0的树称为空二叉树:n=1的树只有一个根结点: n〉1的二叉树由一个根节点和至多两个互不相交的,分别称为左子树和右子树的子二叉树构成 二叉树不是有序树,这是因为,二叉树中某个节点即使只有一个子树也要区分是左子树还是右子

数据结构实践项目——树和二叉树(2)

本文针对数据结构基础系列(6):树和二叉树第7, 11-15课时 7 二叉树与树.森林之间的转换 11 二叉树遍历非递归算法 12 层次遍历算法 13 二叉树的构造 14 线索二叉树 15 哈夫曼树 [项目1 - 二叉树算法验证] 运行并重复测试教学内容中涉及的算法.改变测试数据进行重复测试的意义在于,可以从更多角度体会算法,以达到逐渐掌握算法的程度.使用你的测试数据,并展示测试结果,观察运行结果,以此来领会算法. (1)层次遍历算法的验证 [参考链接] (2)二叉树构造算法的验证 [参考链接]

[BinaryTree] 二叉树常考知识点

1.二叉树第i层至多有2^(i-1)个结点(i>=1). 2.深度为k的二叉树上,至多含2^k-1个结点(k>=1) 3.n0 = n2 + 1(度) 4.满二叉树:深度为k且含有2^k-1个结点的树. 5.完全二叉树:除最后一层外,每一层上的节点数均达到最大值:在最后一层上只缺少右边的若干结点. (树中所含n个结点和满二叉树中编号为1至n的结点一一对应). 6.具有n个结点的完全二叉树的深度为[log2n] + 1. 7.二叉树的链式存储表示:二叉链表.三叉链表(增加双亲指针域).双亲链表.