我是靠谱客的博主 执着蜜蜂,这篇文章主要介绍顺序二叉树(Java),现在分享给大家,希望可以做个参考。

顺序二叉树(Java)

二叉树的顺序存储是将二叉树的所有结点,按照一定的次序,存储到一片连续的存储单元中,主要针对完全二叉树

重要性质

若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意 一个编号为 i 的结点有以下性质(i>=0):

  • 节点为i 的左孩子结点编号为2i+1,右孩子结点编号为 2i+2; ;
  • 若 i=0 ,则该结点是二叉树的根,无双亲;否则i>1 ,其双亲结点的编号为 ⌊(i-1)/2⌋ ;
  • 若 2i+1>n ,则该结点无左孩子; 否则,编号为 2i =1的结点为其左孩子结点;
  • 若 2i+2>n ,则该结点无右孩子结点;否则,编号为2i+2 的结点为其右孩子结点。
遍历方式

对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,然后依次存放在数组中,根据完全二叉树的性质,实现遍历!

1.前序遍历
	public void preorder(int index) {//前序遍历
		if(arr==null||arr.length==0) {
			System.out.println("数组为空!");
		}
		System.out.print(arr[index]+" ");
		if((index*2+1)<arr.length) {
			preorder(2*index+1);//向左子树递归
		}
		if((index*2+2)<arr.length) {
			preorder(2*index+2);//向右子树递归
		}
	}
2.中序遍历
public  void infixorder(int index) {//中序遍历
		if(arr==null||arr.length==0) {
			System.out.println("数组为空!");
		}
		if((index*2+1)<arr.length) {
			infixorder(2*index+1);//向左子树递归
		}
		System.out.print(arr[index]+" ");
		if((index*2+2)<arr.length) {
			infixorder(2*index+2);//向右子树递归
		}
	}
3.后序遍历
public void postorder(int index) {//后序遍历
		if(arr==null||arr.length==0) {
			System.out.println("数组为空!");
		}
		if((index*2+1)<arr.length) {
			postorder(2*index+1);//向左子树递归
		}
		if((index*2+2)<arr.length) {
			postorder(2*index+2);//向右子树递归
		}
		System.out.print(arr[index]+" ");
	}
完整代码

以下图完全二叉树为例
在这里插入图片描述


public class Arraybinarytree2 {

	public static void main(String[] args) {
		String []arr= {"A","B","C","D","E","F"};
	arraybinarytree arrbinarytree = new arraybinarytree(arr);
	System.out.println("前序遍历结果为:");
	arrbinarytree.perorder(); 
	System.out.println();
	System.out.println("中序遍历结果为:");
	arrbinarytree.infixorder();;
	System.out.println();
	System.out.println("后序遍历结果为:");
	arrbinarytree.postorder(); 
	}

}
//定义Arraybinarytree
class arraybinarytree{
	private String []arr;
	public arraybinarytree(String[] arr2) {
		this.arr=arr2;
	}
	public void perorder() {//重构
		this.preorder(0);
	}
	public void infixorder() {
		this.infixorder(0);
	}
	public void postorder() {
		this.postorder(0);
	}
	
	public void preorder(int index) {//前序遍历
		if(arr==null||arr.length==0) {
			System.out.println("数组为空!");
		}
		System.out.print(arr[index]+" ");
		if((index*2+1)<arr.length) {
			preorder(2*index+1);//向左子树递归
		}
		if((index*2+2)<arr.length) {
			preorder(2*index+2);//向右子树递归
		}
	}
	public  void infixorder(int index) {//中序遍历
		if(arr==null||arr.length==0) {
			System.out.println("数组为空!");
		}
		if((index*2+1)<arr.length) {
			infixorder(2*index+1);//向左子树递归
		}
		System.out.print(arr[index]+" ");
		if((index*2+2)<arr.length) {
			infixorder(2*index+2);//向右子树递归
		}
	}
	public void postorder(int index) {//后序遍历
		if(arr==null||arr.length==0) {
			System.out.println("数组为空!");
		}
		if((index*2+1)<arr.length) {
			postorder(2*index+1);//向左子树递归
		}
		if((index*2+2)<arr.length) {
			postorder(2*index+2);//向右子树递归
		}
		System.out.print(arr[index]+" ");
	}
	
}
运行结果
前序遍历结果为:
A B D E C F 
中序遍历结果为:
D B E A F C 
后序遍历结果为:
D E B F C A 

最后

以上就是执着蜜蜂最近收集整理的关于顺序二叉树(Java)的全部内容,更多相关顺序二叉树(Java)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部