博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树
阅读量:5983 次
发布时间:2019-06-20

本文共 2745 字,大约阅读时间需要 9 分钟。

hot3.png

一、二叉树

     特点最多度为2,有左右之分。

     第i层最多有有http://upload.wikimedia.org/math/2/c/2/2c2b51eb5bcb0ba06d0d9ee8f50beb16.png个节点。

     K层总得最多有http://upload.wikimedia.org/math/8/0/d/80d94b5dd6c72527fcdbc7c731f20bb4.png个节点。

     终端节点要比度为2的树节点多一个。

二、存储

http://upload.wikimedia.org/wikipedia/commons/thumb/7/7d/FullBT_CompleteBT.jpg/400px-FullBT_CompleteBT.jpg

       存储既可以用数组因为子树的个数是定的、也可以用链表。

public class BinaryTree {	private BinaryTree left;	private BinaryTree rigth;	private int number;}
创建一个二叉树
/**	 * 创建一个二叉树	 */	public BinaryTree createBinaryTree(){		BinaryTree headTree=new BinaryTree(); 		int input=-1;//如果输入是-1结束树的创建 		Scanner sc=new Scanner(System.in); 		 		System.out.print("请输入当前节点的值:"); 		input=sc.nextInt(); 		if(input==-1)return null; 		        headTree.setNumber(input);        System.out.print("请输入左子树的值:");        headTree.setLeft(createBinaryTree());        System.out.print("请输入右子树的值:");        headTree.setRigth(createBinaryTree());        		return headTree;	}

三、二叉树的遍历

先序、中序、后序 都是深度遍历

借助于栈广度遍历

先序遍历

/**	 * 二叉树的先序遍历 中左右	 */	public void PreOrderTraverse(BinaryTree bt){		if(bt!=null){			System.out.println("当前节点值:"+bt.getNumber());			PreOrderTraverse(bt.getLeft());			PreOrderTraverse(bt.getRigth());		}	}
中序遍历
/*	 * 二叉树的中序遍历 左中右	 */	public void midOrderTraverse(BinaryTree bt){		if(bt!=null){			midOrderTraverse(bt.getLeft());			System.out.println("当前节点值:"+bt.getNumber());			midOrderTraverse(bt.getRigth());		}	}

后序遍历

/*	 * 二叉树的后序遍历 左右中	 */	public void afterOrderTraverse(BinaryTree bt){		if(bt!=null){			afterOrderTraverse(bt.getLeft());			afterOrderTraverse(bt.getRigth());			System.out.println("当前节点值:"+bt.getNumber());		}	}

非递归先序

/**	 * 非递归先序遍历	 */	public void preOrderNoRecursive(BinaryTree bt){		Stack
btStack=new Stack
(); if(bt==null)return; while(bt!=null||!btStack.isEmpty()){ while(bt!=null){ System.out.println("当前节点值:"+bt.getNumber()); btStack.add(bt); bt=bt.getLeft(); } if(!btStack.isEmpty()){ bt=btStack.pop(); bt=bt.getRigth(); } } }
非递归中序遍历

/**	 * 非递归中序遍历	 */	public void midOrderNoRecursive(BinaryTree bt){	Stack
btStack=new Stack
(); while(bt!=null||!btStack.isEmpty()){ while(bt!=null){ btStack.add(bt); bt=bt.getLeft(); } if(!btStack.isEmpty()){ bt=btStack.pop(); System.out.println("当前节点值:"+bt.getNumber()); bt=bt.getRigth(); } } }
非递归后序

/**	 * 非递归后序遍历	 */	public void afterOrderNoRecursive(BinaryTree bt){		Stack
btStack=new Stack
(); Stack
btStackFlag=new Stack
(); while(bt!=null||!btStack.isEmpty()){ while(bt!=null){ btStack.add(bt); btStackFlag.add(false); bt=bt.getLeft(); } if(!btStack.isEmpty()){ bt=btStack.pop(); Boolean flag=btStackFlag.pop(); if(!flag){ btStackFlag.push(true); btStack.push(bt); bt=bt.getRigth(); }else{ System.out.println("当前节点值:"+bt.getNumber()); bt=null; } } } }

 四、二叉树的推导

没有中序时无法推到结果的

转载于:https://my.oschina.net/findurl/blog/345725

你可能感兴趣的文章
【干货】Java岗面试考点大合集
查看>>
Android安全开发之浅谈密钥硬编码
查看>>
iOS 计算两个日期字符串的差值
查看>>
UTF-8 编码及检查其完整性
查看>>
Android NDK开发扫盲及最新CMake的编译使用
查看>>
Weex开发系列(一):初识Weex
查看>>
开源 UI 库中,唯一同时实现了大表格虚拟化和树表格的 Table 组件
查看>>
找到思聪王
查看>>
[译] 学习 Spring Security(五):重发验证邮件
查看>>
快速的React Native开发方法
查看>>
rabbitmq中文教程python版 - 工作队列
查看>>
SpringBoot 1024行代码 - Eureka Server
查看>>
服务器时区问题
查看>>
JAVA反射技术应用-ReflectUtil
查看>>
removeGeneratedClassFiles Failed
查看>>
nagios安装全攻略
查看>>
Perl进阶知识点(2)
查看>>
Android adb.exe 启动失败
查看>>
我的友情链接
查看>>
使用JavaMail完成邮件的编写
查看>>