倾斜头部打印二叉树

eimct9ow  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(397)

再次向大家问好,
我被指派打印我的二叉树,我们应该把头转向左边,从侧面看它——当我提供一个图像时,这是有意义的。

我不知道我的insert方法还是showtree方法是错的。
以下是我的插入方法:

public void insert(Keyed item)
   {
      _root = insert(_root, item);
   }

   private TNode insert (TNode myRoot,Keyed item)
   {
      if(myRoot == null)
      {
         TNode newNode = new TNode();
         newNode.data = item;
         newNode.left = null;
         newNode.right = null;
         return newNode;
      }

      int comp = item.KeyComp(myRoot.data);

      if(comp < 0)
      {
         myRoot.left = insert(myRoot.left, item);
      }
      else if (comp > 0)
      {
         myRoot.right = insert(myRoot.right, item);
      }
      return myRoot;   
   }

下面是我的showtree方法:

public void showTree()
   {
      showTree(_root,1);  
   }

   private void showTree(TNode myRoot,int myLevel)
   {
      if(myRoot == null) 
      {
         return;
      }

      for(int i = 0; i < myLevel; i++)
      {
         System.out.print("\t");

      }  
      showTree(myRoot.right, myLevel + 1);
      System.out.println(myRoot.data.toStr());
      showTree(myRoot.left, myLevel + 1);      
   }

如果有任何其他方法需要帮助-我可以提交它,但我真的不知道我的insert方法是否做得不正确,或者我的showtree方法是否没有正确地隔开我的二叉树。
我非常感谢你的帮助!
谢谢!

qmelpv7a

qmelpv7a1#

在打印当前节点的缩进之前,请尝试打印右侧节点。像这样:

private void showTree(TNode myRoot,int myLevel)
{
  if(myRoot == null) 
  {
     return;
  }

  showTree(myRoot.right, myLevel + 1);
  for(int i = 0; i < myLevel; i++)
  {
     System.out.print("\t");

  }
  System.out.println(myRoot.data.toStr());
  showTree(myRoot.left, myLevel + 1);      
}

我也认为你应该从0级开始打电话 showTree(_root,0); 我个人认为,如果你把缩进合并成一个字符串,然后打印出来,会更容易阅读。像这样:

private void showTree(TNode myRoot,int myLevel)
{
  if(myRoot == null) 
  {
     return;
  }

  String currentNodeIdentation = "";
  for(int i = 0; i < myLevel; i++)
  {
     currentNodeIdentation += "\t";
  }

  showTree(myRoot.right, myLevel + 1);
  System.out.println(currentNodeIdentation + myRoot.data.toStr());
  showTree(myRoot.left, myLevel + 1);      
}

如果你有Java11,你甚至可以使用它 currentNodeIdentation = "\t".repeat(myLevel) .

相关问题