当前位置:   article > 正文

数据结构——二叉树(Java实现)_public int getheight(node parent)

public int getheight(node parent)

此处包括一个泛型二叉树抽象类,一个Integer型实现类,一个测试类。

实现了二叉树的以下功能:

1.先序遍历

2.中序遍历

3.后序遍历

4.求高度

5.求节点总数

6.取指定节点的双亲节点

7.删除指定节点

8.判空

9.清空二叉树

泛型二叉树抽象类

BinaryTree.java:

  1. package binarytree;
  2. import java.util.Queue;
  3. import java.util.Stack;
  4. import java.util.concurrent.LinkedBlockingQueue;
  5. public abstract class BinaryTree<T> {
  6. Node<T> root;
  7. protected int size = 0;
  8. public BinaryTree() {
  9. this.root = new Node<T>();
  10. }
  11. public BinaryTree(T data) {
  12. this.root = new Node<T>(data);
  13. }
  14. public BinaryTree(Node<T> root) {
  15. this.root = root;
  16. }
  17. public void preOrderTraverse() {
  18. System.out.println("pre-order traverse: ");
  19. preOrderTraverse(this.root);
  20. System.out.println();
  21. }
  22. public void preOrderTraverse(Node<T> root) {
  23. if(root == null) {
  24. return;
  25. }
  26. visit(root);
  27. preOrderTraverse(root.left);
  28. preOrderTraverse(root.right);
  29. }
  30. public void inOrderTraverse() {
  31. System.out.println("in-order traverse: ");
  32. inOrderTraverse(this.root);
  33. System.out.println();
  34. }
  35. public void inOrderTraverse(Node<T> root) {
  36. if(root == null) {
  37. return;
  38. }
  39. inOrderTraverse(root.left);
  40. visit(root);
  41. inOrderTraverse(root.right);
  42. }
  43. public void postOrderTraverse() {
  44. System.out.println("post-order traverse: ");
  45. postOrderTraverse(this.root);
  46. System.out.println();
  47. }
  48. public void postOrderTraverse(Node<T> root) {
  49. if(root == null) {
  50. return;
  51. }
  52. postOrderTraverse(root.left);
  53. postOrderTraverse(root.right);
  54. visit(root);
  55. }
  56. public void levelTraverse() {
  57. System.out.println("level traverse: ");
  58. Queue<Node<T>> q = new LinkedBlockingQueue<Node<T>>();
  59. q.add(root);
  60. Node<T> node = new Node<T>();
  61. while(q.isEmpty() != true) {
  62. node = q.poll();
  63. visit(node);
  64. if(node.left != null) {
  65. q.add(node.left);
  66. }
  67. if(node.right != null) {
  68. q.add(node.right);
  69. }
  70. }
  71. System.out.println();
  72. }
  73. public Node<T> getParent(Node<T> node){
  74. return (node == null || node == this.root) ?
  75. null : getParent(this.root, node);
  76. }
  77. public Node<T> getParent(Node<T> root, Node<T> node){
  78. if(root == null || node == null || root == node || node == this.root) {
  79. return null;
  80. }
  81. if(root.left == node || root.right == node) {
  82. return root;
  83. }
  84. if(getParent(root.left, node) != null) {
  85. return getParent(root.left, node);
  86. }
  87. return getParent(root.right, node);
  88. }
  89. public void delete(Node<T> node) {
  90. Node<T> parent = getParent(node);
  91. if(parent.left == node) {
  92. parent.left = null;
  93. }
  94. if(parent.right == node) {
  95. parent.right = null;
  96. }
  97. }
  98. public void getHeight() {
  99. System.out.print("the height is: ");
  100. System.out.println(getHeight(this.root));
  101. }
  102. public int getHeight(Node<T> root) {
  103. if(root == null) {
  104. return 0;
  105. }
  106. int l = getHeight(root.left);
  107. int r = getHeight(root.right);
  108. return l > r ? l + 1 : r + 1;
  109. }
  110. public void getSize() {
  111. this.size = 0;
  112. System.out.print("the size is: ");
  113. getSize(this.root);
  114. System.out.println(this.size);
  115. }
  116. public void getSize(Node<T> root) {
  117. if(root == null) {
  118. return;
  119. }
  120. size++;
  121. getSize(root.left);
  122. getSize(root.right);
  123. }
  124. public void deleteBinaryTree() {
  125. this.root = null;
  126. }
  127. public boolean isEmpty() {
  128. return this.root == null;
  129. }
  130. public abstract void visit(Node<T> node);
  131. }

Character型实现类

CharacterBinaryTree.java:

  1. package binarytree;
  2. public class CharacterBinaryTree extends BinaryTree<Character> {
  3. public CharacterBinaryTree() {
  4. super();
  5. }
  6. public CharacterBinaryTree(Character data) {
  7. super(data);
  8. }
  9. public CharacterBinaryTree(Node<Character> root) {
  10. super(root);
  11. }
  12. @Override
  13. public void visit(Node<Character> node) {
  14. System.out.print(node.data);
  15. }
  16. }

测试类

CharacterBinaryTreeDemo.java:

  1. package binarytree;
  2. public class CharacterBinaryTreeDemo {
  3. public static void main(String[] args) {
  4. Node<Character> nodeA = new Node<Character>('A');
  5. Node<Character> nodeB = new Node<Character>('B');
  6. Node<Character> nodeC = new Node<Character>('C');
  7. Node<Character> nodeD = new Node<Character>('D');
  8. Node<Character> nodeE = new Node<Character>('E');
  9. Node<Character> nodeF = new Node<Character>('F');
  10. Node<Character> nodeG = new Node<Character>('G');
  11. Node<Character> nodeH = new Node<Character>('H');
  12. Node<Character> nodeI = new Node<Character>('I');
  13. nodeA.setLeft(nodeB);
  14. nodeA.setRight(nodeG);
  15. nodeB.setLeft(nodeC);
  16. nodeB.setRight(nodeD);
  17. nodeD.setLeft(nodeE);
  18. nodeD.setRight(nodeF);
  19. nodeG.setLeft(nodeH);
  20. nodeH.setRight(nodeI);
  21. CharacterBinaryTree test = new CharacterBinaryTree(nodeA);
  22. test.preOrderTraverse();
  23. System.out.println("================");
  24. test.inOrderTraverse();
  25. System.out.println("================");
  26. test.postOrderTraverse();
  27. System.out.println("================");
  28. test.levelTraverse();
  29. System.out.println("================");
  30. test.getSize();
  31. test.getHeight();
  32. System.out.println("================");
  33. test.visit(test.getParent(nodeE));
  34. System.out.println();
  35. test.visit(test.getParent(nodeI));
  36. System.out.println();
  37. System.out.println("================");
  38. test.delete(nodeD);
  39. test.preOrderTraverse();
  40. test.getSize();
  41. test.getHeight();
  42. System.out.println("================");
  43. test.delete(nodeI);
  44. test.preOrderTraverse();
  45. test.getSize();
  46. test.getHeight();
  47. System.out.println("================");
  48. }
  49. }

输出结果:

  1. pre-order traverse:
  2. ABCDEFGHI
  3. ================
  4. in-order traverse:
  5. CBEDFAHIG
  6. ================
  7. post-order traverse:
  8. CEFDBIHGA
  9. ================
  10. level traverse:
  11. ABGCDHEFI
  12. ================
  13. the size is: 9
  14. the height is: 4
  15. ================
  16. D
  17. H
  18. ================
  19. pre-order traverse:
  20. ABCGHI
  21. the size is: 6
  22. the height is: 4
  23. ================
  24. pre-order traverse:
  25. ABCGH
  26. the size is: 5
  27. the height is: 3
  28. ================

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号