java数据结构之实现 二叉树 以及二叉树的遍历方式(三)
2017-08-28 09:55
681 查看
网上关于二叉树的实现以及操作有很多,自己花时间仔细瞧了一遍 理解了下具体的原理
二叉树的实现 ,具体看注释 可以评论交流或者发邮件
二叉树的实现 ,具体看注释 可以评论交流或者发邮件
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()); } }
相关文章推荐
- (学习java)二叉树的链式实现以及三种遍历方式
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
- java实现二叉树的构建以及3种遍历方法
- java版的二叉树的先序遍历、中序遍历以及后序遍历(递归以及非递归方式)
- 算法:二叉树的先序遍历、中序遍历、后序遍历(递归及非递归方式)的java代码实现
- java实现二叉树的构建以及3种遍历方法
- java实现二叉树的构建以及3种遍历方法(转)
- java实现二叉树的构建以及3种遍历方法
- 通过前序遍历和中序遍历重建二叉树以及输出后序遍历(Java实现)(二)
- Java 二叉树的实现以及遍历
- java实现二叉树的构建以及3种遍历方法
- Java 二叉树的实现以及遍历
- 数据结构 — 二叉树(创建、遍历)java实现
- java实现二叉树的构建以及3种遍历方法
- 二叉树建立以及先序、中序、后序、层次遍历(JAVA 实现)
- Java实现二叉树的遍历(多种方式实现前中后序的遍历)
- Java实现二叉树及相关遍历方式