您能否举一个函数(递归或非递归)的示例来查找二叉搜索树是否太高?
Could you give an example of a function (recursive or not) that finds if a binary search tree is too tall?
如果二叉搜索树太高相对较快(大多数情况下),我如何使用 C 查找?
更具体地说,假设我需要查找一棵树的高度是否至少为 10,而无需搜索整棵树大部分时间.
(这是可能的,因为我希望大部分输入是高度大于 10 的二叉搜索树。)
如果没有关于树结构的先决条件,除了检查树的一侧,然后检查另一侧,别无他法。
int check_depth(struct tree *root, int depth)
{
if (!root) {
return 0;
} else if (depth <= 1) {
return 1;
} else {
return check_depth(root->left, depth-1) ||
check_depth(root->right, depth-1);
}
}
这是一个简单算法的示例,returns true
一旦找到一个长于 10 的分支。
#include <stdbool.h>
#include <stdio.h>
typedef struct _node
{
int data;
struct _node *l, *r;
}
node;
node *tree; // some tree
...
bool is_too_tall(node *node, int depth, int max_depth)
{
if (node == NULL)
return false;
if (depth > max_depth)
return true;
return is_too_tall(node->l, depth + 1, max_depth)
|| is_too_tall(node->r, depth + 1, max_depth);
}
int main()
{
if (is_too_tall(tree, 1, 10))
puts("Tree is too tall");
}
我认为depth first search is the best option for this algorithm (as opposed to breadth first search因为它更快更简单。
如果二叉搜索树太高相对较快(大多数情况下),我如何使用 C 查找?
更具体地说,假设我需要查找一棵树的高度是否至少为 10,而无需搜索整棵树大部分时间.
(这是可能的,因为我希望大部分输入是高度大于 10 的二叉搜索树。)
如果没有关于树结构的先决条件,除了检查树的一侧,然后检查另一侧,别无他法。
int check_depth(struct tree *root, int depth)
{
if (!root) {
return 0;
} else if (depth <= 1) {
return 1;
} else {
return check_depth(root->left, depth-1) ||
check_depth(root->right, depth-1);
}
}
这是一个简单算法的示例,returns true
一旦找到一个长于 10 的分支。
#include <stdbool.h>
#include <stdio.h>
typedef struct _node
{
int data;
struct _node *l, *r;
}
node;
node *tree; // some tree
...
bool is_too_tall(node *node, int depth, int max_depth)
{
if (node == NULL)
return false;
if (depth > max_depth)
return true;
return is_too_tall(node->l, depth + 1, max_depth)
|| is_too_tall(node->r, depth + 1, max_depth);
}
int main()
{
if (is_too_tall(tree, 1, 10))
puts("Tree is too tall");
}
我认为depth first search is the best option for this algorithm (as opposed to breadth first search因为它更快更简单。