5.1
(1)由于內(nèi)部節(jié)點度都為2,故內(nèi)部節(jié)點數(shù)為n-1,總數(shù)為2n-1;
(2)我們可以設(shè)根節(jié)點值為一,每個子節(jié)點的值為父節(jié)點的二分之一吆寨,則第li層的葉子節(jié)點的值恰好為2的-li+1次方,則有子節(jié)點的和為父節(jié)點的值踩寇,由此將所有的葉子節(jié)點的值之和等于他們的父節(jié)點啄清,最終等于根節(jié)點的值,因而等于一俺孙,證畢辣卒。
5.2
總有a<=b<=c;理由如下:
由二叉搜索樹的性質(zhì)我們知道位于路徑左邊的值可以跟路徑上的值向上搜索到同一個父節(jié)點,而左邊的值是由這個父節(jié)點向左延申睛榄,故而小于路徑上的值荣茫。
同理路經(jīng)右邊的值都是大于路徑上的值
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如果該節(jié)點兩個孩子都有懈费,則直接pop
if (top->left&&top->right)
{
q.pop();
q.push(top->left);
q.push(top->right);
}
//2.2如果該節(jié)點左孩子為空计露,右孩子不為空博脑,則一定不是完全二叉樹
if (top->left==NULL&&top->right)
{
return false;
}
//2.3如果該節(jié)點左孩子不為空憎乙,右孩子為空或者該節(jié)點為葉子節(jié)點,則該節(jié)點之后的所有結(jié)點都是葉子節(jié)點
if ((top->left&&top->right==NULL)||(top->left==NULL&&top->right==NULL))
{
q.pop();
//則該節(jié)點之后的所有結(jié)點都是葉子節(jié)點
while (!q.empty())
{
top=q.front();
if (top->left==NULL&&top->right==NULL)
{
q.pop();
}
else
{
return false;
}
}
return true;
}
}
return true;
}
復(fù)雜度為O(N)