第4章第1节练习题5 二叉树查找第k个结点的值
2016-07-02 12:24
423 查看
问题描述
求先序遍历序列中第k(0≤k≤二叉树中结点个数)个结点的值。算法思想
求解先序遍历中第k个结点的值,设置一个全局变量cnt来记录已经访问过的结点序号,当k==cnt时,表示找到了满足条件的结点,打印输出。否则继续按照先序遍历的方式遍历整棵二叉树便可。实现过程参见算法描述1
经过上述的思想,并没有将我们所需要的结果返回回来,因此在上述算法的思想上再次进行修改。在递归函数中为了表示区分,当T==NULL时,返回#;当找到时,返回T->data。当cnt≠k时,则递归的在左子树中查找,若找到了则返回该值,否则继续递归的在右子树中查找,并返回结果,实现过程参见
算法描述2
算法描述
算法描述1
int cnt=1; void Findkth(BiTNode* T,int k){ if(T==NULL){ return; } if(k==cnt){ printf("%c",T->data); } cnt++; Findkth(T->lchild,k); Findkth(T->rchild,k); }
算法描述2
int cnt=1; ElemType Findkth(BiTNode* T,int k){ char ch; if(T==NULL){ return '#'; } if(k==cnt){ return T->data; } cnt++; ch=Findkth(T->lchild,k); if(ch!='#'){ return ch; } ch=Findkth(T->rchild,k); return ch; }
具体代码见附件。
附件
//AB#DG###CE##F## #include<stdio.h> #include<stdlib.h> typedef char ElemType; typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTree CreateBiTree(BiTNode*); ElemType Findkth(BiTNode*,int); int main(int argc, char* argv[]){ BiTNode* T=NULL; T=(BiTNode*)malloc(sizeof(BiTNode)); T=CreateBiTree(T); char ch; ch=Findkth(T,3); ch=='#'?printf("Not Find\n"):printf("Find %c\n",ch); return 0; } BiTree CreateBiTree(BiTNode* T){ ElemType x; scanf("%c",&x); if(x=='#'){ return T; } T=(BiTNode*)malloc(sizeof(BiTNode)); T->data=x; T->lchild=CreateBiTree(T->lchild); T->rchild=CreateBiTree(T->rchild); return T; } int cnt=1; ElemType Findkth(BiTNode* T,int k){ char ch; if(T==NULL){ return '#'; } if(k==cnt){ return T->data; } cnt++; ch=Findkth(T->lchild,k); if(ch!='#'){ return ch; } ch=Findkth(T->rchild,k); return ch; }
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#数据结构之顺序表(SeqList)实例详解
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- Lua教程(七):数据结构详解
- C#算法函数:获取一个字符串中的最大长度的数字
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析