先序遍历
void preorder(Tree r){
if(r){
printf("%c ",r->data);
preorder(r->l);
preorder(r->r);
}
}
后序遍历
void postorder(Tree r){
if(r){
preorder(r->l);
preorder(r->r);
printf("%c ",r->data);
}
}
中序遍历
void inorder(Tree r){
if(r){
preorder(r->l);
printf("%c ",r->data);
preorder(r->r);
}
}
求大于等于x的节点的个数
int count(Tree r,int x){
if(!r) return 0;
return r->data>=x+count(r->l)+count(r->r);
}
求树高
int count(Tree r){
if(!r) return 0;
int hl=count(r->l);//左子树的高度
int hr=count(r->r);//右子树的高度
return 1+hl>hr?hl:hr;//到弹栈时树高仍为0,每次弹栈加一。
}