给定一棵二叉查找树 如何判断是否是一棵正则二叉树 用c++代码实现
时间: 2024-12-15 13:24:15 浏览: 14
判断一颗给定的二叉查找树是否是一棵正则二叉树(每一层的所有节点都只有一个1或0的位),可以通过递归的方式来检查。首先,我们需要检查根节点是否有两个孩子,如果有,则根节点的左子节点的值应该是2的倍数减去1(表示为0),右子节点的值是2的倍数(表示为1)。然后对左右子树分别递归做同样的检查。
以下是一个简单的C++代码实现:
```cpp
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
bool isRegularBST(TreeNode* root) {
if (root == NULL) return true; // 空树视为正则二叉树
// 检查根节点的子节点
if (root->left && root->right) {
if (root->val != 2 * root->left->val + 1 || root->val != 2 * root->right->val) {
return false;
}
}
// 递归检查左右子树
return isRegularBST(root->left) && isRegularBST(root->right);
}
```
这个函数会返回 `true` 如果输入的二叉查找树是一棵正则二叉树,否则返回 `false`。
阅读全文