一、求二叉链树中指定值所在的层次
参考书(《数据结构(C语言)》–严蔚敏等编著,清华大学出版社);
相关代码:
#include "stdio.h"
#include "stdlib.h"
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef char TElemType;
typedef struct BiNode {
TElemType data; //数据域
struct BiNode *lchild, *rchild; //左右孩子指针
} BiNode, *BiTree;
Status CreateBiTree(BiTree &T);
//构造二叉链表的二叉树T
Status CreateBiTree(BiTree &T) {
//按 先序次序输入二叉树中节点的值,#代表空树
char ch;
scanf("%c",&ch);
if(ch == '#') T=NULL;
else {
if(!(T = (BiNode *)malloc(sizeof(BiNode)))) exit(OVERFLOW);
T->data = ch; //生成树根节点
CreateBiTree(T->lchild); //构造左子树
CreateBiTree(T->rchild); //构造右子树
}
return OK;
}
Status SeekNode_Level(BiTree T,int L,int &n,char e);
//求结点e所在层次,用n返回层次(递归)
Status SeekNode_Level(BiTree T,int L,int &n,char e) {
if(T==NULL) return ERROR;
if(T) {
L++;
if(T->data==e)
n=L; //将L的层次值赋给n并返回
SeekNode_Level(T->lchild,L,n,e);
SeekNode_Level(T->rchild,L,n,e);
}
}
int main(void) {
BiTree T;
char e;
int L,n=0;
CreateBiTree(T);
getchar();
scanf("%c",&e);
SeekNode_Level(T,L,n,e); //n为返回e的层次,若没有则n=0,返回0
printf("%d",n);
return OK;
}
/*
按照该序列建立二叉树,求二叉树中值为x的节点的层次(假设所有节点值唯一)。
若在该二叉树中没有值为x的结点则输出0。例如:
测试输入:
ABC##D##E##
D
预期输出:
3
*/
实现:
实现:
初始二叉树为:
ABC##D##E##
如图:
ABCD###E##FG###
如图: