分别求二叉树前、中、后序的第k个节点
一、求二叉树的前序遍历中的第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>-);
}
}
分别求二叉树前、中、后序的第k个节点的更多相关文章
- C++二叉树前中后序遍历(递归&非递归)统一代码格式
统一下二叉树的代码格式,递归和非递归都统一格式,方便记忆管理. 三种递归格式: 前序遍历: void PreOrder(TreeNode* root, vector<int>&pa ...
- 飘逸的python - 极简的二叉树前中后序通杀函数
对于任一结点.能够按某种次序运行三个操作: 訪问结点本身(N) 遍历该结点的左子树(L) 遍历该结点的右子树(R) 用来表示顺序,即,前序NLR/中序LNR/后序LRN. 以下我们用namedtupl ...
- [C++] 非递归实现前中后序遍历二叉树
目录 前置技能 需求描述 binarytree.h 具体实现 binarytree.cpp main.cpp 网上代码一搜一大片,大同小异咯. 书上的函数实现代码甚至更胜一筹,而且抄一遍就能用,唯一问 ...
- 二叉树前中后/层次遍历的递归与非递归形式(c++)
/* 二叉树前中后/层次遍历的递归与非递归形式 */ //*************** void preOrder1(BinaryTreeNode* pRoot) { if(pRoot==NULL) ...
- 前中后序递归遍历树的体会 with Python
前序:跟->左->右 中序:左->根->右 后序:左>右->根 采用递归遍历时,编译器/解释器负责将递归函数调用过程压入栈并保护现场,在不同位置处理根节点即可实现不 ...
- Binary Tree Traversal 二叉树的前中后序遍历
[抄题]:二叉树前序遍历 [思维问题]: 不会递归.三要素:下定义.拆分问题(eg root-root.left).终止条件 [一句话思路]: 节点非空时往左移,否则新取一个点 再往右移. [输入量] ...
- POJ 2255 Tree Recovery && Ulm Local 1997 Tree Recovery (二叉树的前中后序遍历)
链接:poj.org/problem?id=2255 本文链接:http://www.cnblogs.com/Ash-ly/p/5463375.html 题意: 分别给你一个二叉树的前序遍历序列和中序 ...
- C++实现对树的创建和前中后序遍历
#include<iostream>#include<stdio.h> using namespace std; class BitNode{ public: char dat ...
- 数据结构-C语言递归实现树的前中后序遍历
#include <stdio.h> #include <stdlib.h> typedef struct tree { int number ; struct tree *l ...
随机推荐
- gridcontrol 根据某一列数据来控制其他列合并
首先需要属性栏中设置这一列可以合并,再在CellMerge方法中写 private void gridView1_CellMerge(object sender, DevExpress.XtraGri ...
- 使用memcached遇到的一些问题
1 .多台服务器时间不统一,引发缓存存取异常. 问题描述: 同一台memcache缓存服务器,比如memcache.server=192.168.88.51:11211 提供缓存服务: 项目部署到 ...
- JavaFX(Maven 方式)
运行界面第一种方式 运行界面第二种方式 参考文献 https://github.com/AlmasB/JavaFX11-example
- git--创建空的分支
背景:项目进行中,需要创建一个空分支.在Git中创建分支,是必须有一个父节点的,也就是说必须在已有的分支上来创建新的分支,如果你的工程已经进行了一段时间,这个时候是无法创建空分支的. 解决方法: 使用 ...
- 云笔记项目-Spring事务学习-传播MANDATORY
接下来测试事务传播属性MANDATORY Service层 所有Service层实现类都设置事务传播属性为MANDATORY. LayerT层代码 package LayerT; import jav ...
- [邀月博客] SQL Server 2008中SQL增强之二:Top新用途
top数为变量时 declare @intTop intset @intTop=2print @intTop --set rowcount @intTop--select * from [dbo].[ ...
- oracle数值函数 abs()、 ceil()、 cos()、 cosh()
1.abs绝对值函数 格式 abs(number) 即abs(数值) 例如 abs(100) 结果为 100,abs(-100)结果为100: 2.ceil用来取数值最小整数函数 格式 ceil(nu ...
- Ubuntu---添加输入法
摘要:Ubuntu 在刚刚安装好之后,默认是不支持直接输入中文的,所以我们需要安装支持中文的输入法.网络上面一般推荐使用的输入法是 Fcitx(小企鹅输入法),我们今天就来安装和配置它. step1: ...
- Beautiful Numbers(牛客网)
链接:https://ac.nowcoder.com/acm/problem/17385来源:牛客网 题目描述 NIBGNAUK is an odd boy and his taste is stra ...
- Docker端口映射
Docker端口映射是指将容器内应用的服务端口映射到本机宿主机器.当要在宿主机外部访问Docker内部应用时,需要对容器内应用端口进行映射. 一.容器启动时指定端口映射 容器运行时可以通过-p 或 - ...