遍历树以查找节点

Jav*_*ail 5 java algorithm recursion binary-tree

我正在搜索树以查找传递的值.不幸的是,它不起作用.我开始用打印机调试它,奇怪的是它实际上找到了值,但是跳过了return语句.

    /**
  * Returns the node with the passed value
  */
 private TreeNode searchNodeBeingDeleted(Comparable c, TreeNode node)
 {  
  if(node == null) 
  {
   return null;
  }

  if(c.equals((Comparable)node.getValue()))
  {
   System.out.println("Here");
   return node;
  }
  else
  {
   if(node.getLeft() != null)
   {
    System.out.println("left");
    searchNodeBeingDeleted(c, node.getLeft());
   }
   if(node.getRight() != null)
   {
    System.out.println("right");
    searchNodeBeingDeleted(c, node.getRight());
   }
  }
  return null; //i think this gives me my null pointer at bottom
 }
Run Code Online (Sandbox Code Playgroud)

它打印出如下结果:

left
left
right
right
Here
right
left
right
left
right
Exception in thread "main" java.lang.NullPointerException
at Program_14.Driver.main(Driver.java:29)
Run Code Online (Sandbox Code Playgroud)

我不知道这是否有帮助,但这是我的树:

     L
   /   \
  D     R
 / \   / \
A   F M   U
 \       / \
  B     T   V
Run Code Online (Sandbox Code Playgroud)

谢谢你的时间.

nan*_*nda 4

尝试这个:

private TreeNode searchNodeBeingDeleted(Comparable c, TreeNode node)
 {  
  if(node == null) 
  {
   return null;
  }

  if(c.equals((Comparable)node.getValue()))
  {
   System.out.println("Here");
   return node;
  }
  else
  {
   if(node.getLeft() != null)
   {
    System.out.println("left");
    TreeNode n = searchNodeBeingDeleted(c, node.getLeft());
    if (n != null) {
      return n;
    }
   }
   if(node.getRight() != null)
   {
    System.out.println("right");
    TreeNode n = searchNodeBeingDeleted(c, node.getRight());
    if (n != null) {
      return n;
    }
   }
  }
  return null; //i think this gives me my null pointer at bottom
 }
Run Code Online (Sandbox Code Playgroud)