
/* 设计一个算法,求出指定节点在给定二叉排序树中的层次 分析: 我们可以根据二叉排序树的性质,从根节点一直向下查找,每查找一次,层次便加一*/typedef struct node { int data; node *left, *right;}Tree;#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>Tree *create(Tree *T) {//先序创建一颗二叉树 int data; printf("请输入当前节点值:data="); scanf("%d", &data); getchar(); if (data != -1) { T = (Tree *)malloc(sizeof(Tree)); T->data = data; T->left = NULL; T->right = NULL; T->left = create(T->left); T->right = create(T->right); } return T;}void findLevel(Tree *T, int p,int &depth) { if (T) { if (T->data < p) { depth++; findLevel(T->right, p,depth); } else if(T->data > p){ depth++; findLevel(T->left, p,depth); } }}int main() { //创建一颗二叉排序树 Tree *T = (Tree *)malloc(sizeof(Tree *)); T = create(T); int p = 7,depth=1;//手动指定节点值 findLevel(T,p,depth); printf("该节点所在的层次为第%d层",depth); return 0;}