题目描述:
假设二叉树采用链式存储,设计一个算法,求先序遍历中第k个结点的值。
算法思想:
设置一个全局变量i,初值等于根结点在先序遍历中的序号,即i=1。当二叉树b为空时返回特殊的字符‘#’,当i=k时,表示找到了满足条件的结点,返回b->data。当i不等于k时,递归地在左子树继续查找,找到返回其值,否则就在右子树中递归寻找,并返回其结果。
(ps:求其他遍历序列的第k个结点也是用类似的方法,只不过查找的顺序有所差异而已。)
代码如下:
int i=1;
ElemType PreNode(BiTree b,int k){
if(b==NULL) return '#';
if(i==k) return b->data;
i++;
temp=PreNode(b->lchild,k); //左子树递归查找
if(temp!='#') return temp; //在左子树中,则返回该值
temp=PreNode(b->rchild,k); //在右子树中递归查找
return temp;
}