java数据结构之实现 二叉树 以及二叉树的遍历方式(三)
来源:互联网 发布:爱淘宝 1元红包 最新 编辑:程序博客网 时间:2024/06/04 07:15
网上关于二叉树的实现以及操作有很多,自己花时间仔细瞧了一遍 理解了下具体的原理
二叉树的实现 ,具体看注释 可以评论交流或者发邮件
import java.util.*;import java.util.Stack;/** * Created by gy on 2017/8/23. * email : guoyang000111@163.com * 二叉树的遍历 */public class LinkBTreeOrder { private java.util.Stack stack=new java.util.Stack (); /** * 前序遍历 * @param btree */ public void preOrder(Btree btree){ if(btree!=null){ System.out.println(btree.getRootData()); if(btree.getLeftChild()!=null){ preOrder(btree.getLeftChild()); } if(btree.getRightChild()!=null){ preOrder(btree.getRightChild()); } } } /** * 中序遍历 * @param btree */ public void inOrder(Btree btree){ if(btree!=null){ if(btree.getLeftChild()!=null){ inOrder(btree.getLeftChild()); } System.out.println(btree.getRootData()); if(btree.getRightChild()!=null){ inOrder(btree.getRightChild()); } } } /** * 后序遍历 * @param btree */ public void postOrder(Btree btree){ if(btree!=null){ if(btree.getLeftChild()!=null){ postOrder(btree.getLeftChild()); } if(btree.getRightChild()!=null){ postOrder(btree.getRightChild()); } System.out.println(btree.getRootData()); } } /** * 使用非递归法 实现中序遍历 * @param btree */ public void noRecursionOrder(Btree btree){ stack.clear(); stack.push(btree); Btree bt; while(!stack.isEmpty()) { //左孩子结点进栈 while((bt = ((Btree)(stack.peek())).getLeftChild()) != null) { stack.push(bt); } //如果该结点没有右孩子,则逐级往上出栈 while(!stack.isEmpty() &&!( (Btree)stack.peek()).hasRightTree()) { bt = (Btree)stack.pop(); System.out.println(bt.getRootData()); } //如果该结点有右孩子,则右孩子进栈 if(!stack.isEmpty() && ( (Btree)stack.peek() ).hasRightTree()){ bt = (Btree)stack.pop(); System.out.println(bt.getRootData()); stack.push(bt.getRightChild()); } } } /** * 使用非递归法 实现前序排列 * @param btree */ public void noRecursionPreOrder(Btree btree){ stack.clear(); stack.push(btree); Btree bt; while(!stack.isEmpty()) { //左孩子结点进栈 while((bt = ((Btree)(stack.peek())).getLeftChild()) != null) { //没有右结点 输出结点 并且有左结点 入栈 while(!stack.isEmpty() &&!( (Btree)stack.peek()).hasRightTree()) { bt = (Btree)stack.pop(); System.out.println(bt.getRootData()); if(bt.hasLeftTree()){ stack.push(bt.getLeftChild()); } } //有右结点 输出结点 同时右节点入栈 左结点入栈 if(!stack.isEmpty() && ( (Btree)stack.peek() ).hasRightTree()){ bt = (Btree)stack.pop(); System.out.println(bt.getRootData()); stack.push(bt.getRightChild()); stack.push(bt.getLeftChild()); } if(stack.isEmpty()){ break; } } } } Btree node; int num=0; /** * 求二叉树的最大值 int型 * @param root * @return */ public Btree maxNode(Btree root) { // write your code here if(root!=null){ if((int)root.getRootData()>num){ node=root; num=(int)root.getRootData(); } if(root.hasLeftTree()||root.hasRightTree()){ if(root.hasLeftTree()){ if((int)root.getLeftChild().getRootData()>num){ node=root.getLeftChild(); num=(int)root.getLeftChild().getRootData(); } maxNode(root.getLeftChild()); } if(root.hasRightTree()){ if((int)root.getRightChild().getRootData()>num){ node=root.getRightChild(); num=(int)root.getRightChild().getRootData(); } maxNode(root.getRightChild()); } }else{ return node; } } return node; } public static void main(String[] args) { Btree root =new LinkBtree(1); Btree bt1, bt2, bt3, bt4,bt5,bt6,bt7,bt8,bt9; bt1=new LinkBtree(-5); root.addLeftTree(bt1); bt2=new LinkBtree(0); bt1.addLeftTree(bt2); bt3=new LinkBtree(2); root.addRightTree(bt3); bt4=new LinkBtree(3); bt1.addRightTree(bt4); bt5=new LinkBtree(-4); bt3.addLeftTree(bt5); bt6=new LinkBtree(-5); bt3.addRightTree(bt6); bt7=new LinkBtree(10); bt5.addLeftTree(bt7);// bt8=new LinkBtree("**");// bt2.addRightTree(bt7);// bt6.addLeftTree(bt8);// bt9=new LinkBtree("666");// bt8.addLeftTree(bt9); System.out.println("节点数:"+root.size()); System.out.println("深度:"+root.dept()); LinkBTreeOrder order =new LinkBTreeOrder();// order.inOrder(root);// order.noRecursionOrder(root);// order.preOrder(root);// order.noRecursionPreOrder(root);// order.inOrder(root);// order.postOrder(root); Btree root1=order.maxNode(root); System.out.println(root1.getRootData()); }}
阅读全文
0 0
- java数据结构之实现 二叉树 以及二叉树的遍历方式(三)
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
- Java实现完全二叉树的构建以及三种遍历方式
- (学习java)二叉树的链式实现以及三种遍历方式
- 二叉树的三种遍历方式java实现
- 用Java实现二叉树的三种遍历方式
- 二叉树的三种遍历方式java实现
- 数据结构之二叉树的前中后序遍历java实现
- java数据结构之二叉树的遍历
- Java 二叉树的实现以及遍历
- 数据结构中二叉树的三种遍历方式
- 二叉树的建立以及三种遍历方式
- java实现二叉树的三种遍历方式,并把二叉树转为双向链表,输出二叉树
- Java实现二叉树建立以及三种遍历
- 「数据结构」二叉树的遍历以及Python实现
- 数据结构与算法之二叉树的遍历方式
- 【数据结构】中二叉树的遍历方式
- win7 设置Apache tomcat 开机自启
- 整数性质
- mysql查询最近7天的数据,没有数据自动补0
- SIFT算法详解
- Python中的Scapy初探之二
- java数据结构之实现 二叉树 以及二叉树的遍历方式(三)
- Squid代理服务器(三)——ACL访问控制
- 修改eclipse 中用的jdk版本
- Excel使用数据透视图配合切片器制作动态数据图表
- Java异常的限制
- 题目17:单调递增最长子序列
- 【Python】Python3 List insert()方法
- webservice的简单开发步骤
- 部署两个项目时报 Web app root system property already set to different value: