只有三个点的二叉树,完成他的查找操作和打印操作。
二叉树如图所示:
下面附上二叉树的代码:
#include
struct node;
// 代表的是方块
typedef struct tree{
struct node *p_node;
}tree;
// 代表的是圆圈
typedef struct node{
int num;
tree left;
tree right;
}node;
tree *search(tree *p_rt,int num){
tree *p_tmp = NULL;
if (!(p_rt->p_node)){ // 若方块指向为空 则返回方块的地址
return p_rt;
}
if (p_rt->p_node->num == num){ // 若找到正确结果 就返回找到的值
return p_rt;
}
p_tmp = search(&(p_rt->p_node->left),num); //将左子树同样看成一棵二叉树,递归调用结果
if(p_tmp->p_node){
return p_tmp;
}
return search(&(p_rt->p_node->right),num); //将右子树看成一颗二叉树,递归调用结果 注意因为函数添加return 必有返回值
}
void output(tree *p_rt){
if (!p_rt->p_node) {
return;
}
printf("%d ",p_rt->p_node->num);
output(&(p_rt->p_node->left));
output(&(p_rt->p_node->right));
}
int main(){
node rootnd = {2},leftnd = {10},rightnd = {8};
tree rt;
rt.p_node = &rootnd; //生成二叉树
rootnd.left.p_node = &leftnd;
rootnd.right.p_node = &rightnd;
output(&rt);
printf("\n");
int tmp = 11;
tree *p_tmp = search(&rt,tmp);
if (p_tmp->p_node){
printf("%d ",p_tmp->p_node->num);
}
else {
printf("the element %d we do node find.\n",tmp);
}
return 0;
}