#include <stdio.h>#include <malloc.h>
typedef struct BTNode {
int data;
struct BTNode *left, *right;
}BTNode;
BTNode *creat_bt(){ //按前序建二叉树;
BTNode *t;int x;
printf("请输入数据:");
scanf("%d",&x);
if (x==0)
{t=NULL; printf("OK");
}
else
{ t=(BTNode *)malloc(sizeof(BTNode));
t->data=x;
t->left=creat_bt();
t->right=creat_bt(); }//递归算法编写二叉树;
return t;
}
//先以先序遍历递归找到元素值为x的结点,然后再递归求以x为根结点的子树的深度
BTNode *preorder_x(BTNode *root, int x)
{ BTNode *bt=root;
if (root != NULL){ if (bt->data==x) return bt; if(preorder_x(bt->left, x)||preorder_x(bt->right, x)){
//核心同样是递归;
if(preorder_x(bt->left, x)) return preorder_x(bt->left, x); else return preorder_x(bt->right,x); }
} return NULL; }
int depth(BTNode *root,BTNode *bt){
if (root==NULL||bt == NULL) return 0; printf("%d\n",root->data);
if(root==bt) return 1;
else { int h1=1,h2=1;
h1+=depth(root->left,bt);
h2+=depth(root->right,bt);
if(h1==h2) return 0;//这里表示无法找到bt节点; return h1>h2?h1:h2;//找到bt节点之后,路径长度一定会不同;最终找到的路径可以相加;
}
}
int main(){ BTNode *root = creat_bt();
int x; printf("请输入x的值:");
scanf("%d", &x);
BTNode *p = preorder_x(root, x);
int d=depth(root,p);
printf("以元素值为x的结点为根的子树的深度为:%d", d);
}
6.44编写递归算法:求二叉树中以元素值为x的节点为根的子树的深度.
最新推荐文章于 2023-05-13 20:03:58 发布