1.找出树中所有权值为负数的结点(t为指向根结点的指针)
int sum = 0;
void count(Tree t){
if(t == NULL){
return ;
}else{
if(t.value < 0){
sum ++;
}
count(t->left);
count(t->right)
}
}
2. 二叉树转换为森林
假如一棵二叉树的根节点有右孩子,则这棵二叉树能够转换为森林,否则将转换为一棵树。
1.从根节点开始,若右孩子存在,则把与右孩子结点的连线删除。再查看分离后的二叉树,若其根节点的右孩子存在,则连线删除…直到所有这些根节点与右孩子的连线都删除为止。
2.将每棵分离后的二叉树转换为树。
如图:
3.广义表的head与tail的基本用法
广义表最基本的操作:取表头head(L)与取表尾tail(L)
例:L=(a,(b,c,d))
head(L)=a
tail(L)=((b,c,d))
head(tail(L))=(b,c,d)
tail(tail(L))=()
head(head(tail(L)))=b
tail(head(tail(L)))=(c,d)
head(tail(head(tail(L))))=c
tail(tail(head(tail(L))))=(d)
head(tail(tail(head(tail(L)))))=d
tail(tail(tail(head(tail(L)))))=()
4. 设一棵树T的度为4,其中度为1,2,3,4的结点个数分别为4,2,1,1。则T中的叶子结点为
我们可以设这棵树中叶子结点数为n0,度为1的结点数为n1,度为2的结点数为n2,度为3的结点数为n3,度为4的结点数为n4,总结点数为n,则可得到:
n=n0+n1+n2+n3+n4 (1)
设树的总入度为m。由于在树中除了根结点外,其余每一个结点都有唯一的一个分支进入,则树的总结点数为
n=m+1 (2)
又由于树中这m个进入分支分别由非叶子结点射出,其中度为1的结点射出1,度为2的结点射出 2,依此类推。而且射出分支总数与总的进入分支数相等,即
m=n1+2n2+3n3+4n4 (3)
由式(1)、(2)、(3)可以得到n0=8。
5.算法的时间复杂度取决于
A.问题的规模
B.待处理数据的初态
C.A和B
问题规模是指算法复杂程度,n级别,logn级别,n平方级别。初态指的就是处理数据是否有序这种信息。C