寻找先序遍历的第K个值(21.6.15)

题目描述:

假设二叉树采用链式存储,设计一个算法,求先序遍历中第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; 
}

你可能感兴趣的:(LeetCode,二叉树)