博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
返回结点值为e的二叉树指针
阅读量:6152 次
发布时间:2019-06-21

本文共 1978 字,大约阅读时间需要 6 分钟。

题意为,如果二叉树某结点的值为e(假定是整型二叉树),返回这个结点的指针。初看这道题,联想到二叉树可以很简单的遍历,直接返回这个指针不就行了吗?

如下图所示,假如要返回值为3的结点指针:

设计好了一个函数

void Traverse(Tree &L,int e,Tree &q){    if(L)    {        if(L->data==e)        {            cout<<"找到了"<
left,e,q); Traverse(L->right,e,q); }}

程序能正确运行,也确实返回了正确的指针值。可为什么书上没有采用这种方法呢?思考一下,不难发现这段程序的不利之处就在于,即使找到值之后它依然继续运行,一直遍历完整棵树!书上采用了一种非常巧妙的办法!

它的思路是,把结点放入队列,再检测该结点是否有左右子树,如果有,也放入队列。然后出列元素,看它的数据是否等于e,如此循环下去!

在这个循环中,判定的条件是:队列不为空!然后,出列元素(最左边),看它的值是否等于e,然后再检测它是否有左树,或者右树,如果有再入队列,这种方法很巧妙啊!

还有一个问题,就是这个队列需要多大的空间?规律是:出队一个,入队两个,(就按满二叉树的最多结点计算),所以队列中存在的结点数就会出现这种情况:

1  2  3  4  5  .........所以队列中的最大结点数就是,二叉树最底层的结点数,如,三层的满二叉树,底层有4个结点,则队列需要的节点最少为4,这样计算的原因是可能利用循环队列。

#include 
using namespace std;#define MAXSIZE 16 typedef struct node{ char data; struct node *left,*right;}*Tree,Node;void creat(Tree &T) /*创建二叉树*/{ char ch; scanf("%c",&ch); if(ch=='#') T=NULL; else { T=(Tree)malloc(sizeof(Node)); T->data=ch; creat(T->left); creat(T->right); }}Tree LocateElem(Tree T,char e) /*查找=e的元素,返回其指针*/{ Tree Q[MAXSIZE]; int front=0,rear=0; Tree p; if(T) { Q[rear]=T; rear++; while(front!=rear)/*队列不空*/ { p=Q[front];/*出队*/ front=(front+1)%MAXSIZE; if(p->data==e)/*如果找到*/ return p; if(p->left)/*左树入队*/ { Q[rear]=p->left; rear=(rear+1)%MAXSIZE; } if(p->right)/*右树入队*/ { Q[rear]=p->right; rear=(rear+1)%MAXSIZE; } } } return NULL;}void DestoryTree(Tree &T){ if(T) { DestoryTree(T->left); DestoryTree(T->right); free(T); T=NULL; }}int main(){ Tree q; Tree T; creat(T); if((q=LocateElem(T,'a'))!=NULL)/*返回指针*/ cout<
data; else cout<<"没有找到数据值为e的元素!"<

 

转载于:https://www.cnblogs.com/tinaluo/p/5237136.html

你可能感兴趣的文章
如何避免历史回退到登录页面
查看>>
《图解HTTP》1~53Page Web网络基础 HTTP协议 HTTP报文内的HTTP信息
查看>>
unix环境高级编程-高级IO(2)
查看>>
树莓派是如何免疫 Meltdown 和 Spectre 漏洞的
查看>>
雅虎瓦片地图切片问题
查看>>
HTML 邮件链接,超链接发邮件
查看>>
HDU 5524:Subtrees
查看>>
手机端userAgent
查看>>
pip安装Mysql-python报错EnvironmentError: mysql_config not found
查看>>
http协议组成(请求状态码)
查看>>
怎样成为一个高手观后感
查看>>
[转]VC预处理指令与宏定义的妙用
查看>>
JQuery radio单选框应用
查看>>
MySql操作
查看>>
python 解析 XML文件
查看>>
MySQL 文件导入出错
查看>>
java相关
查看>>
由一个异常开始思考springmvc参数解析
查看>>
向上扩展型SSD 将可满足向外扩展需求
查看>>
虚机不能启动的特例思考
查看>>