5.1
(1)由于内部节点度都为2,故内部节点数为n-1,总数为2n-1;
(2)我们可以设根节点值为一,每个子节点的值为父节点的二分之一,则第li层的叶子节点的值恰好为2的-li+1次方,则有子节点的和为父节点的值,由此将所有的叶子节点的值之和等于他们的父节点,最终等于根节点的值,因而等于一,证毕。
5.2
总有a<=b<=c;理由如下:
由二叉搜索树的性质我们知道位于路径左边的值可以跟路径上的值向上搜索到同一个父节点,而左边的值是由这个父节点向左延申,故而小于路径上的值。
同理路经右边的值都是大于路径上的值
5.3
bool IsComplete(TreeNode<T>* root)
{
//1.树为空,返回错误
if (root==NULL)
{
return false;
}
//2.树不为空
queue<TreeNode<T>*> q;
q.push(root);
while (!q.empty())
{
TreeNode<T>* top=q.front();
//2.1如果该节点两个孩子都有,则直接pop
if (top->left&&top->right)
{
q.pop();
q.push(top->left);
q.push(top->right);
}
//2.2如果该节点左孩子为空,右孩子不为空,则一定不是完全二叉树
if (top->left==NULL&&top->right)
{
return false;
}
//2.3如果该节点左孩子不为空,右孩子为空或者该节点为叶子节点,则该节点之后的所有结点都是叶子节点
if ((top->left&&top->right==NULL)||(top->left==NULL&&top->right==NULL))
{
q.pop();
//则该节点之后的所有结点都是叶子节点
while (!q.empty())
{
top=q.front();
if (top->left==NULL&&top->right==NULL)
{
q.pop();
}
else
{
return false;
}
}
return true;
}
}
return true;
}
复杂度为O(N)
网友评论