【问题标题】:Convert Level Order Traversal to Inorder Traversal of a complete binary tree将Level Order Traversal转换为完整二叉树的Inorder Traversal
【发布时间】:2013-06-29 04:46:57
【问题描述】:

给定数组中一棵完全二叉树的层序遍历,如何将所述树的中序遍历存储在给定的数组中,而不用建树。 这就是我想出的。

void recurse (int *inp, int size_array, int *output, int iter_a, int &iter_b)
{
    if (iter_a>=size_array)
        return;

    recurse (inp,size_array,output,2*iter_a+1,iter_b);


    output[iter_b] = inp[iter_a];
    iter_b++;


    recurse (inp,size_array,output,2*iter_a+2,iter_b);

}

是否有针对上述问题的就地非递归 O(n) 解决方案?

【问题讨论】:

    标签: c++ binary-tree tree-traversal


    【解决方案1】:

    这是我创建的函数,用于将数组 a 的 levelorder 遍历中的中序遍历存储在数组 e 中,n 是数组 a 的长度。设置初始 k=0 和 x=0。

    void convert(long long int a[],long long int e[],long long int n,long long int k,long long int x)
    {
        if((2*k+1)>=n||(2*k+2)>=n)
            return;
        convert(a,e,n,2*k+1,x);
        e[x]=a[k];
        x++;
        convert(a,e,n,2*k+2,x);
    
        return;
    }
    

    【讨论】:

      【解决方案2】:

      这是一种将层级顺序转换为有序而不是就地的迭代解决方案

      private class Entry{
          int data;
          int pos;
      
          Entry(int data, int pos){
              this.data = data;
              this.pos = pos;
          }
      }
      
      public void convertLevelToInorder(int[] levelOrder){
      
          // nodes are stored from index 1
      
          int len = levelOrder.length;
          int[] inOrder = new int[len];
      
          Stack<Entry> stack = new Stack<Entry>();
      
          int pos = 1;
          int count = 1;
      
          while(!stack.isEmpty() || pos < len){
      
              while(pos < len && levelOrder[pos] != -1 ){
                  stack.push(new Entry(levelOrder[pos],pos));
                  pos = pos*2;
              }
      
              Entry e = stack.pop();
              inOrder[count++] = e.data;
              pos = e.pos*2+1;
          }
      
          for(int i=1;i<len;i++)
              System.out.print(inOrder[i] + "  ");
          System.out.println();
      }
      

      【讨论】:

        猜你喜欢
        • 2020-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多