一、求二叉树的前序遍历中的第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>-);
}
}

最新文章

  1. 【原】AFNetworking源码阅读(五)
  2. 用Canvas实现动画效果
  3. Eclipse相关设置与优化
  4. 搭建maven项目
  5. 用ccproxy + stunnel做个加密代理
  6. 【TYVJ】1359 - 收入计划(二分)
  7. 3p
  8. python 如何在一个for循环中遍历两个列表
  9. 牛客网编程练习之PAT乙级(Basic Level):1041 说反话
  10. Python_正则表达式样例
  11. vue_小项目_模糊搜索(列表过滤)_结果排序
  12. Python-----多线程threading用法
  13. halcon脱离hdvp运行
  14. 【剑指offer】合并有序链表
  15. Avahi DOS攻击broadcast-avahi-dos
  16. ThinkPHP框架 表单传值自动验证!!
  17. 再谈 iptables 防火墙的 指令配置
  18. oj错误之char型超出范围
  19. Android的断点续传的下载在线文件示例
  20. 新项目中使用的linux命令

热门文章

  1. [Android]Linux下WebRTC下载与编译
  2. Inno setup 操作注册表操作参数详解
  3. RabbitMQ安装及使用
  4. django项目部署
  5. 爬虫之进阶 基于twisted实现自制简易scrapy框架(便于对scrapy源码的理解)
  6. 云笔记项目-Spring事务学习-传播NOT_SUPPORTED
  7. 复杂JSON对象的查询与合并
  8. IIS的UrlRewrite模块
  9. Python之Unittest和Requests库详解
  10. 深度学习项目——基于循环神经网络(RNN)的智能聊天机器人系统