考研数据结构(每日一题)
题目:假设二叉树采用二叉链存储结构存储,设计一个算法,求先序遍历序列中第k(1<=k<=二叉树中结点个数)个结点的值
算法思想:
设置一个全局变量i(初始值为1)来表示进行先序遍历
先用先序遍历二叉树,当二叉树b为空时,返回特殊字符‘#’
当k==i时,即为要找的结点,返回b->data
当k不等于i时,递归在左子树中查找,若找到则返回该值,否则继续递归在右子树中继续查找,并返回其结果
完整代码:
int i = 1; //全局变量
ElemType PreNode(BiTree b,int k){
char ch;
if(b == NULL){
return '#'; //若为空,返回特殊字符
}
if (i == k){
return b -> data; //若相等,则当前结点为第k个结点
}
i ++;
ch = PreNode(b -> lchild,k); //左子树中递归寻找
if(ch != '#'){
return ch; //在左子树中,则返回该值
}
ch = PreNode(b -> rchild,k); //在右子树中递归寻找
return ch;
}