文章
2
粉丝
0
获赞
0
访问
852
(1)根据题给条件,采用递归算法思想,进行判断。若该结点为空结点或没有同时存在左右子树,则该节点本身不是所求节点,直接返回左子树或右子树中满足条件的结点个数;若该节点同时有左右子树,因为是二叉搜索树,因此该结点与左子树最小距离是与左子树中最右下结点的距离,与右子树最小距离是与右子树中最坐下结点的距离,判断这两个距离是否相等,若相等则说明该结点满足,返回左子树和右子树中满足条件的结点个数之和再加一;若不相等,返回左子树和右子树中满足条件的结点个数之和。
(2)
int countNodes(TreeNode* root){
if(root == NULL) return 0;
//如果该结点没有左孩子或者右孩子,则该结点本身不是;
else if (root->left == NULL || root->right == NULL){
return countNodes(root->left) + countNodes(root->right);
}
TreeNode* leftmax = root->left;
TreeNode* rightmin = root->right;//记录左右子树与root的最小距离的结点
while(leftmax->right != NULL) leftmax = leftmax->right;
while(rightmin->left != NULL) rightmin = rightmin->left;
if(root->val - leftmax->val == rightmin->val - rooot->val)
return return countNodes(root->left) + countNodes(root->right) + 1;
else return countNodes(root->left) + countNodes(root->right);
}
(3)二叉搜索树的高度为h = log n,在递归内部查找最小距离的时间 &...
登录后发布评论
暂无评论,来抢沙发