【发布时间】:2016-02-04 11:27:37
【问题描述】:
我正在尝试编写一个简单的递归方法来查看二叉搜索树是否包含值。这是我最初想出的:
static boolean doesContainData(Node root, int data){
if (root.data == data){
return true;
}
if (root == null){
return false;
}
if (data > root.data){
return doesContainData(root.right, data);
}
else if(data < root.data){
return doesContainData(root.left, data);
}
return false;
}
但是,对于 BST 不包含具有数据的节点的情况,它似乎会抛出 NullPointerException。经过一些测试,我意识到当我将功能更改为这个时,它可以工作:
static boolean doesContainData(Node root, int data){
if (root.data == data){
return true;
}
if (root == null){
return false;
}
if (data > root.data){
if (root.right == null){
return false;
}
return doesContainData(root.right, data);
}
else if(data < root.data){
if (root.left == null){
return false;
}
return doesContainData(root.left, data);
}
return false;
}
我不太清楚为什么后者有效而前者无效。在后者中,我正在检查左/右节点是否为空,但我看不出这与原始方法有何不同。在第一种方法中,我只是再次调用了递归方法,它最终会检查基本情况中的节点。
有什么想法吗?
【问题讨论】:
-
if (root == null){永远不会为真,因为使用root.data之前会抛出 NullPointerException。
标签: java search recursion binary-tree binary-search-tree