Java_Binary tree 二叉树分享

向右看齐 2024-04-01 12:39 187阅读 0赞

Java_Binary tree 二叉树分享

文章目录

  • Java_Binary tree 二叉树分享
    • 代码实现
    • 运行结果
    • 心得分享

具体内容的解释都在注释里面

代码实现

  1. import java.util.LinkedList;
  2. import java.util.Queue;
  3. public class Extree {
  4. private String data;//声明数据域
  5. private Extree lchild;//声明左孩子
  6. private Extree rchild;//声明右孩子
  7. //getter和setter方法
  8. public String getData() {
  9. return data;
  10. }
  11. public void setData(String data) {
  12. this.data = data;
  13. }
  14. public Extree getLchild() {
  15. return lchild;
  16. }
  17. public void setLchild(Extree lchild) {
  18. this.lchild = lchild;
  19. }
  20. public Extree getRchild() {
  21. return rchild;
  22. }
  23. public void setRchild(Extree rchild) {
  24. this.rchild = rchild;
  25. }
  26. public Extree(String data){
  27. //定义有参构造函数(构造数据域为data值的结点)
  28. this.data=data;//让对象为Extree的参数传入data域中
  29. }
  30. public static void preOrder(Extree tNode){
  31. //用于表达前序遍历的方法
  32. if(tNode != null) {
  33. //只要引入的数据不为空,则执行下方内容
  34. System.out.print(tNode.data + " ");//先输出此节点的data内容
  35. preOrder(tNode.lchild);//再递归输出此节点的左孩子内容
  36. preOrder(tNode.rchild);//再递归输出此节点的右孩子内容
  37. }
  38. }
  39. public static void inOrder(Extree tNode){
  40. //用于表达中序遍历的方法
  41. if(tNode != null) {
  42. //只要引入的数据不为空,则执行下方内容
  43. inOrder(tNode.lchild);//先递归输出此节点的左孩子内容
  44. System.out.print(tNode.data + " ");//再输出此节点的data内容
  45. inOrder(tNode.rchild);//再递归输出此节点的右孩子内容
  46. }
  47. }
  48. public static void PostOrder(Extree tNode){
  49. //用于表达后序遍历的方法
  50. if(tNode != null) {
  51. //只要引入的数据不为空,则执行下方内容
  52. PostOrder(tNode.lchild);//先递归输出此节点的左孩子内容
  53. PostOrder(tNode.rchild);//再递归输出此节点的右孩子内容
  54. System.out.print(tNode.data + " ");//再输出此节点的data内容
  55. }
  56. }
  57. public static void levelOrder(Extree tNode){
  58. //用于表达层次遍历的方法
  59. if(tNode==null) {
  60. //只要引入的数据不为空,则执行下方内容
  61. return ;
  62. }
  63. Queue<Extree> queue=new LinkedList ();//创建一个Extree类型的队列对象queue去调用LinkedList中对Queue重写的方法
  64. queue.offer(tNode);//将tNode进行入队操作
  65. Extree count=null;//定义一个用于承载出队元素的对象
  66. while(!queue.isEmpty()){
  67. //若队列非空则执行循环
  68. count=queue.poll();//用current来承载出队元素
  69. System.out.print(count.data+" ");//输出此时元素的data域
  70. if(count.lchild!=null){
  71. //结点非空则入队左孩子
  72. queue.offer(count.lchild);
  73. }
  74. if(count.rchild!=null){
  75. //结点非空则入队右孩子
  76. queue.offer(count.rchild);
  77. }
  78. }
  79. }
  80. public static void main(String[] args) {
  81. Extree b1=new Extree("A");//输入按照前序遍历为顺序的元素内容
  82. Extree b2=new Extree("B");
  83. Extree b3=new Extree("D");
  84. Extree b4=new Extree("E");
  85. Extree b5=new Extree("J");
  86. Extree b6=new Extree("C");
  87. Extree b7=new Extree("F");
  88. Extree b8=new Extree("I");
  89. Extree b9=new Extree("G");
  90. b1.lchild=b2;//确定每个元素的左、右孩子关系
  91. b1.rchild=b6;
  92. b2.lchild=b3;
  93. b2.rchild=b4;
  94. b4.lchild=b5;
  95. b6.lchild=b7;
  96. b6.rchild=b9;
  97. b7.rchild=b8;
  98. //依次进行遍历运算
  99. System.out.print("前序遍历为:");
  100. Extree.preOrder(b1);//从二叉链表的根节点进行遍历
  101. System.out.println();
  102. System.out.print("中序遍历为:");
  103. Extree.inOrder(b1);//从二叉链表的根节点进行遍历
  104. System.out.println();
  105. System.out.print("后序遍历为:");
  106. Extree.PostOrder(b1);//从二叉链表的根节点进行遍历
  107. System.out.println();
  108. System.out.print("层次遍历为:");
  109. Extree.levelOrder(b1);//从二叉链表的根节点进行遍历
  110. System.out.println();
  111. }
  112. }

运行结果

结果截图

心得分享

在层序遍历中要用到队列,需要创建一个Extree类型的队列对象queue去调用LinkedList中对Queue重写的方法,在循环外层进行根节点的入队操作,循环内部开始遍历所有的左、右孩子,然后挨个输出。
在前序遍历、后序遍历、中序遍历和层序遍历的方法中,只能使用print,而不能使用println,否则会将每个元素后都进行换行操作,因为内部方法不是所有元素进行一次性输出,而是一次一个的输出元素。只能在全部输出结束后,进行换行操作。
注意在前序遍历、后序遍历、中序遍历和层序遍历的方法中,第一步先判空,不能忘记判空。
要注意每次运行前序遍历、后序遍历、中序遍历和层序遍历的方法,是从二叉链表的根节点开始运行的。
扩展二叉树需要将输入的字符串转换成为字符,之后对第一个根节点的左右结点进行访问,如果下面一个元素不为#,则设置它为根节点的左孩子,再把此左孩子看做新的根节点,查看下面一个元素内容,直到元素内容为#停止,如果下一个元素内容不为#,则它为此时根节点的右孩子,若内容到达#了,则返回根节点的双亲,看其下一个内容是否为#,不为#,则为这个双亲的右孩子,以此类推,最后返回到最初的根节点,访问下一个内容,去确定其右孩子是否存在。


以上就是本文全部内容,如果它对您有帮助,请您帮我点个赞,这对我真的很重要

发表评论

表情:
评论列表 (有 0 条评论,187人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Tree)和

    目录 1.树的定义 2.一些树的关键词定义 3.树的存储结构 4.二叉树的定义 5.满二叉树和完全二叉树 6.二叉树的性质 7.二叉树的存储方式 8.二叉树的基