分别求二叉树前、中、后序的第k个节点
2024-08-27 15:28:38
一、求二叉树的前序遍历中的第k个节点
//求先序遍历中的第k个节点的值
int n=;
elemType preNode(BTNode *root,int k){
if(root==NULL)
return ' ';
if(n==k)
return root->data;
n++;
elemType ch = preNode(root->lchild,k);
if(ch!=' ')
return ch;
ch = preNode(root->rchild,k);
return ch;
}
//求先序遍历中的第k个节点的值(非递归)
elemType preNode2(BTNode *root,int k){
if(root!=NULL){
int n=;
stack<BTNode*> s;
BTNode *p=root;
s.push(p);
while(!s.empty()){
p=s.top();
s.pop();
n++;
if(n==k){
//printf("%c ",p->data);
return p->data;
}
if(p->rchild!=NULL)
s.push(p->rchild);
if(p->lchild!=NULL)
s.push(p->lchild);
}
}else
return ' ';
}
二、求二叉树的中序遍历中的第k个节点
//求中序遍历中的第k个节点的值
elemType inNode(BTNode *root,int k){
if(root==NULL)
return ' ';
stack<BTNode*> s;
BTNode *p=root;
int n=;
while(!s.empty()||p){
while(p){
s.push(p);
p=p->lchild;
}
if(!s.empty()){
p=s.top();
s.pop();
n++;
if(n==k)
return p->data;
p=p->rchild;
}
}
}
三、求二叉树的后序遍历中的第k个节点
//求后序遍历中的第k个节点的值
elemType postNode(BTNode *root,int k){
BTNode* stack[];
int top=-;
int f=;
int n=;
BTNode *b=NULL;
if(root!=NULL){
BTNode *p=root;
do{
while(p){
stack[++top]=p;
p=p->lchild;
}
f=;
b=NULL;
while(top>-&&f){
p=stack[top];
if(p->rchild==b){
n++;
if(n==k)
return p->data;
b=p;
top--;
}else{
p=p->rchild;
f=;
}
}
}while(top>-);
}
}
最新文章
- 【原】AFNetworking源码阅读(五)
- 用Canvas实现动画效果
- Eclipse相关设置与优化
- 搭建maven项目
- 用ccproxy + stunnel做个加密代理
- 【TYVJ】1359 - 收入计划(二分)
- 3p
- python 如何在一个for循环中遍历两个列表
- 牛客网编程练习之PAT乙级(Basic Level):1041 说反话
- Python_正则表达式样例
- vue_小项目_模糊搜索(列表过滤)_结果排序
- Python-----多线程threading用法
- halcon脱离hdvp运行
- 【剑指offer】合并有序链表
- Avahi DOS攻击broadcast-avahi-dos
- ThinkPHP框架 表单传值自动验证!!
- 再谈 iptables 防火墙的 指令配置
- oj错误之char型超出范围
- Android的断点续传的下载在线文件示例
- 新项目中使用的linux命令