标签:art info important mic pac list color log 上层
(排序)二叉树的创建及中序遍历
写起来比C复杂一点,思路大同小异~
1 package Collection; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 /* 6 * (排序)二叉树的创建及中序遍历 7 */ 8 public class Node { 9 public Node LNode; 10 public Node RNode; 11 public Object value; // 结点的值 12 13 public void add(Object v) { // 传入的参数是要加入二叉树的新结点的值,是数值!!! 14 if (this.value == null) { 15 value = v; 16 } else { 17 if ((Integer) v > (Integer) value) { // 新增的结点的值大于当前结点的值 18 if (RNode == null) { // 当前结点右子树为空,要新建右子树结点 19 RNode = new Node(); // 使当前结点的右子树指向新增的结点,此时RNode的value自然没有赋值,是null 20 } 21 // 如果RNode非空,说明该结点右子树非空,则在右子树的基础上继续调用add以把数值v添加到二叉树正确的位置, 22 // 如果RNode为空,自然是上面新建右子树结点,并且由于此时RNode的value肯定是null,于是调用本身的add方法,把v赋值到RNode的value 23 RNode.add(v); 24 } else { // 新增的结点的值小于当前结点的值 25 if (LNode == null) { 26 LNode = new Node(); 27 } 28 LNode.add(v); 29 } 30 } 31 32 } 33 34 // 二叉树的中序遍历,若二叉树本身是排序二叉树,则中序遍历能“有序输出”所有结点数值 35 public List<Object> values() { // 返回类型是List 36 List<Object> values = new ArrayList<Object>(); // 用来保存中途遍历的结果 37 if (LNode != null) { 38 values.addAll(LNode.values()); // 左子树非空,递归的“递” 39 } 40 41 values.add(value); // 把当前结点数值保存到values列表 42 43 if (RNode != null) { 44 values.addAll(RNode.values()); // 右子树非空,递归的“递” 45 } 46 47 return values; // 递归的“归”,先上层返回中途遍历结果 48 49 } 50 51 public static void main(String[] args) { 52 int randoms[] = new int[] { 67, 7, 30, 73, 10, 0, 78, 81, 10, 74 }; 53 Node roots = new Node(); 54 for (int number : randoms) { //建立(排序)二叉树 55 roots.add(number); 56 } 57 System.out.println(roots.values()); //打印中序遍历结果 58 } 59 }
效果图:
标签:art info important mic pac list color log 上层
原文地址:https://www.cnblogs.com/gilgamesh-hjb/p/12218895.html