【问题标题】:Array representation of Binary Tree (print method)二叉树的数组表示(打印方法)
【发布时间】:2012-10-22 18:54:47
【问题描述】:

我完成了我的任务,只是希望输出看起来不错,所以我需要一个打印方法,它可以打印二叉树的树结构(由数组表示)。

在树的数组表示中:

如果节点:i

孩子:2*i, 2*i+1

父级:i/2

例如对于数组

value 10 5 8 2 3 6 7
index 1  2 3 4 5 6 7

树表示应该是:

     10
  5      8
2   3  6   7

它不必与上面显示的完全相同。它可以是任何能正确显示树的表示。

有人可以帮我吗? 谢谢

【问题讨论】:

    标签: java arrays printing binary-tree


    【解决方案1】:

    这是任何人都可以查看的代码。 (*好久没用Java写了)

    public class PrintTree{
     
        
        static int PowerOf2(int power)
        {
            return (1<<power);
        }
        
        static void PrintTreeArray(int array[], int arrayLength)
        {
        int currentLevel = 0;
        int maxPerLevel = PowerOf2(currentLevel);
        for(int i = 0; i < arrayLength; i++)
        {
            if(i == maxPerLevel-1)
            {
                System.out.println("\n");
                currentLevel++;
                maxPerLevel = PowerOf2(currentLevel);
            }
            System.out.print(" "+array[i]);
        }
        }
    
         public static void main(String []args)
         {
            int[] array = new int[]{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};
            PrintTreeArray(array,15);
         }
    }
    

    【讨论】:

      【解决方案2】:

      这应该很容易。对于第一行,打印 1。第二行,打印数组元素 2、3。第三行,打印数组元素 4、5、6、7。第四排,8,9,10,11,12,13,14,15。看到图案了吗?每一行,您打印元素 2^n 到 2^(n+1) - 1,其中顶行为零。

      这假设如果有一些节点没有两个孩子,那些空孩子仍然使用数组中的空间。

      【讨论】:

      • 感谢您的回复。我知道了!您能否告诉我如何使用数组计算树的级别?例如如果数组有1个元素,它的级别是1,如果2-3个元素,级别是2,4-7个元素,级别是3等。有公式可以计算吗?
      • 由于每一层都有前一层的两倍,所以完整二叉树中的项目数是 2 的幂(减 1)。要反过来求深度,您应该能够使用以 2 为底的对数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多