当前位置:   article > 正文

数据结构之有序二叉树(2):构建与输出_1.以二叉链表表示二叉树,建立一棵二叉树。 2.输出二叉树的中序遍历结果。 3.输出

1.以二叉链表表示二叉树,建立一棵二叉树。 2.输出二叉树的中序遍历结果。 3.输出

我们之前已经学习过单链表的构建,而二叉树的构建和单链表大同小异。

还是先写一个类来构建二叉树的节点。

  1. public class TreeNode {
  2. public Integer value;
  3. public TreeNode leftChild;
  4. public TreeNode rightChild;
  5. public TreeNode(Integer value) {this.value=value;}
  6. }

然后再定义一个测试类方便后续测试。

  1. public class Test {
  2. public static void main(String[] args) {
  3. BinaryTree binaryTree = new BinaryTree(1);
  4. BinaryTree binaryTree = new BinaryTree(2);
  5. BinaryTree binaryTree = new BinaryTree(3);
  6. }

现在的话我们只是构建了三个毫不相干的节点,为了让它们联系起来形成二叉树,我们还得创建一个管理类并写相应的方法来构建二叉树以及实现对二叉树的一些基本操作。

构建二叉树有两种方法。

方法一:

  1. public class BinaryTree {
  2. /**
  3. * 定义当前整棵树的记录
  4. */
  5. public TreeNode root;
  6. public void insert(Integer value) {
  7. //新建一个节点
  8. TreeNode newNode = new TreeNode(value);
  9. if (root == null) {
  10. root = newNode;
  11. return;
  12. }
  13. //创建节点进行遍历
  14. TreeNode currentNode = root;
  15. TreeNode parentNode;
  16. while(true){
  17. parentNode = currentNode;
  18. if(newNode.value > currentNode.value) {
  19. currentNode = currentNode.rightChild;
  20. if(currentNode == null){
  21. parentNode.rightChild = newNode;
  22. return;
  23. }
  24. } else{
  25. currentNode = currentNode.leftChild;
  26. if(currentNode == null){
  27. parentNode.leftChild = newNode;
  28. return;
  29. }
  30. }
  31. }
  32. }

方法二(递归):

  1. public TreeNode insert(Integer value, TreeNode node){
  2. //新建一个节点
  3. TreeNode newNode = new TreeNode(value);
  4. if (root == null) {
  5. root = node;
  6. return root = newNode;
  7. }
  8. if(node.value < value){
  9. if(node.rightChild == null){
  10. node.rightChild = newNode;
  11. return root;
  12. }
  13. return insert(value,node.rightChild);
  14. } else {
  15. return insert(value,node.leftChild);
  16. }
  17. }

二叉树的输出我们可以利用jdk当中的队列来实现。

  1. // 队列 --> 一个数组 / 链表 --> 入队列和出队列的方法
  2. // add() pop()
  3. public void Order(){
  4. LinkedList<TreeNode> queue = new LinkedList<>();
  5. queue.add(root);
  6. while (!queue.isEmpty()){
  7. TreeNode treeNode = queue.pop();
  8. System.out.println(treeNode.value);
  9. if (treeNode.leftChild != null){
  10. queue.add(treeNode.leftChild);
  11. }
  12. if (treeNode.rightChild !=null){
  13. queue.add(treeNode.rightChild);
  14. }
  15. }
  16. }

主要用的是add方法(节点的添加)和pop方法(输出头结点)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/633357
推荐阅读
相关标签
  

闽ICP备14008679号