简单完全二叉树的实现
来源:互联网 发布:php 惠新宸 编辑:程序博客网 时间:2024/04/28 00:14
二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”和“右子
树”,其次序不能随意颠倒,是有序树的一种。
二叉树主要有以下性质:
若根结点的层次为1,则二叉树第i层最多有2的(i-1)次方个结点。
在高度为k的二叉树中,则最多有2的k次方-1个结点(k≥0)
设一棵二叉树节点个数为n,则父节点个数为n/2。
一棵具有n个结点的完全二叉树,对序号为i(0≤i<n)的结点,则:
若i=0,则i为根结点,无父母结点;若i >0,则i的父母结点序号为:
若2i+1<n,则i的左孩子结点序号为2i+1;否则i无左孩子。
若2i+2<n,则i的右孩子结点序号为2i+2;否则i无右孩子。
要实现二叉树,首先我们也得先创建节点,然后再把节点连接成一颗二叉树即可。
创建节点:
一个节点有一个值域和一个左边引用和右边引用,值域用来存放该节点的值,左右
两个引用分别用来指向它的左子树节点和右子树节点。上面的代码再加上构造函数
到最大值;在最后一层上只缺少右边的若干结点。
先创建一个整型数组,然后把这些整型数组都赋值到TreeNode中,
TreeNode node = new TreeNode(value,null,null);
我们也是要初始时候把左右引用赋值为null的,然后把这些节点都存储起来,再遍
以上就是我们创建一个完全二叉树的过程,要检验我们创建的是否是对的,就要遍
历该二叉树,查看数据是否是对的。
二叉树的遍历有三种方式,先序遍历,中序遍历,后序遍历,
分别为以下解释;
先序遍历树:先访问根节点,然后访问左子树,最后访问右子树
中序遍历树:先访问左子树,然后访问根节点,最后访问右子树
后续遍历树:先访问左子树,然后访问右子树,最后访问根节点
我通过先序遍历检验该树的创建是对的,方法如下:
树”,其次序不能随意颠倒,是有序树的一种。
二叉树主要有以下性质:
若根结点的层次为1,则二叉树第i层最多有2的(i-1)次方个结点。
在高度为k的二叉树中,则最多有2的k次方-1个结点(k≥0)
设一棵二叉树节点个数为n,则父节点个数为n/2。
一棵具有n个结点的完全二叉树,对序号为i(0≤i<n)的结点,则:
若i=0,则i为根结点,无父母结点;若i >0,则i的父母结点序号为:
若2i+1<n,则i的左孩子结点序号为2i+1;否则i无左孩子。
若2i+2<n,则i的右孩子结点序号为2i+2;否则i无右孩子。
要实现二叉树,首先我们也得先创建节点,然后再把节点连接成一颗二叉树即可。
创建节点:
public class TreeNode {private int value;private TreeNode LeftNode;private TreeNode RightNode;}
一个节点有一个值域和一个左边引用和右边引用,值域用来存放该节点的值,左右
两个引用分别用来指向它的左子树节点和右子树节点。上面的代码再加上构造函数
和set及get方法就是一个完整的树节点了。
到最大值;在最后一层上只缺少右边的若干结点。
先创建一个整型数组,然后把这些整型数组都赋值到TreeNode中,
TreeNode node = new TreeNode(value,null,null);
我们也是要初始时候把左右引用赋值为null的,然后把这些节点都存储起来,再遍
历他们,给引用赋值,完成二叉树的构建。
//创建树的节点,value为一个int数组for(int i=0; i<value.length; i++){TreeNode tree_node = new TreeNode(value[i],null,null);list.add(tree_node);//添加到队列中}//把节点连接成为树,父节点个数由二叉树性质所知为size/2,但是不要包括到那//个可能没有两个子树的父节点,所以要size/2-1;for(int i=0; i<list.size()/2-1; i++){//遍历队列 TreeNode tempNode = list.get(i);//获取节点 tempNode.setLeftNode(list.get(2*i+1));//获取节点的左子树 tempNode.setRightNode(list.get(2*i+2));//获取节点右子树//左右子树依据二叉树性质得到}//完全二叉树有一个父节点有可能只有一个子节点,也可能有两个节点,所以要单独拿出来连接int nodeIndex = list.size()/2-1;//取到有变数的父节点下标TreeNode parentNode=list.get(list.size()/2-1);//拿到该父节点parentNode.setLeftNode(list.get(2*nodeIndex+1));//此节点一定有左子节点if(list.size()%2==1){//如果节点总数为奇数,表示该父节点还有右子节点parentNode.setRightNode(list.get(2*nodeIndex+2));}
以上就是我们创建一个完全二叉树的过程,要检验我们创建的是否是对的,就要遍
历该二叉树,查看数据是否是对的。
二叉树的遍历有三种方式,先序遍历,中序遍历,后序遍历,
分别为以下解释;
先序遍历树:先访问根节点,然后访问左子树,最后访问右子树
中序遍历树:先访问左子树,然后访问根节点,最后访问右子树
后续遍历树:先访问左子树,然后访问右子树,最后访问根节点
我通过先序遍历检验该树的创建是对的,方法如下:
public void firstSearch(TreeNode root){//传入树根节点if(root == null){//如果根节点为空return;}System.out.print(root.getValue()+",");//输出该节点值firstSearch(root.getLeftNode());//递归获取左节点firstSearch(root.getRightNode());//递归获取右节点}
通过递归调用我们方便的遍历了整个二叉树,也检验我的二叉树的创建没有问题;
中序遍历就是把先序遍历的输出语句移到递归获取左节点的下一句执行即可,
后序遍历就是把线序遍历的输出语句移到最后一句执行即可。
0 0
- 简单完全二叉树的实现
- 完全二叉树的简单应用
- 树、二叉树、完全二叉树的简单理解
- 浅谈完全二叉树遍历的实现
- 简单二叉树的实现
- 二叉树的简单实现
- 简单二叉树的实现
- 二叉树的简单实现
- 二叉树的简单实现
- 二叉树的简单实现
- 二叉树的简单实现
- 数组实现完全二叉树
- java 实现完全二叉树
- PHP实现完全二叉树
- java实现完全二叉树
- 堆的实现-用数组表示的完全二叉树
- 递归实现单链表,完全二叉树的新建
- 完全二叉树的创建与堆排序代码实现
- 百度地图,高德地图在打包时都要混淆
- 正则表达式
- DOCTYPE对document.documentElement.clientHeight的影响
- CodeForces 13C. Sequence 滚动数组+离散化
- 1028. List Sorting (25)
- 简单完全二叉树的实现
- 阿甘学java视频--lesson2
- 解决ecshop和jq的冲突问题
- 部署自己的私有 Docker Registry
- 【Jason's_ACM_解题报告】Calculator Conundrum
- 【转】浅谈尾递归
- GridView和ListView设置第一行和最后一行的边距
- HTML5 学习---------(SVG 基础)
- 深入解析MFC消息相应和消息路由