求代码:编写递归算法,在二叉树中求位于先序序列中第k个位置的结点的值

数据结构:(c语言)自行设计二叉树;要求二叉树用二叉链表存储结构。

第1个回答  推荐于2018-04-24
好像就是线索二叉树,
下面是二叉树创建、遍历程序,没有线索二叉树。仅供参考。。。
//------------------------------------------------------------------------------
// Copyright (c) 2009 eryar All rights reserved.
//
// File : BinTree.h
// Author : eryar@163.com
// Date : 2009-9-13 19:07
// Version : 1.0v
//
// Description : Binary tree declaration
//
//==============================================================================

#ifndef _BINTREE_H_
#define _BINTREE_H_

#include <iostream>
using namespace std;

typedef char ElemType;

typedef struct Node{
ElemType data;
struct Node* lChild;
struct Node* rChild;
}Node;

typedef struct Node* BinTree;

//------------------------------------------------------------------------
bool InitBinTree(BinTree* T);
void CreateBinTree(BinTree* T);
void PreOrderTraverse(BinTree T);
void InOrderTraverse(BinTree T);
void PostOrderTraverse (BinTree T);
void LevelOrderTraverse(BinTree T);
bool isEmpty(BinTree T);
//========================================================================

#endif // _BINTREE_H_

//------------------------------------------------------------------------------
// Copyright (c) 2009 eryar All rights reserved.
//
// File : BinTree.cpp
// Author : eryar@163.com
// Date : 2009-9-13 19:11
// Version : 1.0v
//
// Description : Binary tree definition
//
//==============================================================================

#include "BinTree.h"

/*
Parameter : BinTree*
Return : true or false
Description : initialize the binary tree
*/
bool InitBinTree(BinTree* T) {
*T = NULL;
return true;
} // InitBinTree

/*
Parameter : BinTree*
Return : none
Description : create a binary tree in preorder
*/
void CreateBinTree(BinTree* T) {
ElemType elem;

cin>>elem;

if (elem == '#') {
*T = NULL;
}
else {
*T = new Node;
(*T)->data = elem;
CreateBinTree(&(*T)->lChild);
CreateBinTree(&(*T)->rChild);
}

} // CreateBinTree

/*
Parameter : BinTree*
Return : true or false
Description : PreOrder visit binary tree
*/
void PreOrderTraverse(BinTree T) {
if (T) {
cout<<"node is : "<<T->data<<endl;
PreOrderTraverse(T->lChild);
PreOrderTraverse(T->rChild);
}

} // PreOrderTraverse

/*
Parameter : BinTree
Return : true or false
Description : inorder traverse binary tree
*/
void InOrderTraverse(BinTree T) {

if (T) {
InOrderTraverse(T->lChild);
cout<<"node is : "<<T->data<<endl;
InOrderTraverse(T->rChild);
}

} // InOrderTraverse

/*
Parameter : BinTree
Return : true or false
Description : PostOrder traverse binary tree
*/
void PostOrderTraverse(BinTree T) {

if (T) {
PostOrderTraverse(T->lChild);
PostOrderTraverse(T->rChild);
cout<<"node is : "<<T->data<<endl;
}

} // PostOrderTraverse

/*
Parameter : BinTree
Return : none
Description : Level order traverse the binary tree
*/
void LevelOrderTraverse(BinTree T) {
} // LevelOrderTraverse

/*
Parameter : BinTree
Return : true or false
Description : if tree is empty return true
*/
bool isEmpty(BinTree T) {
if (T) {
return false;
}
else {
return true;
}

} // isEmpty
//------------------------------------------------------------------------------
// Copyright (c) 2009 eryar All rights reserved.
//
// File : main.cpp
// Author : eryar@163.com
// Date : 2009-9-13 19:04
// Version : 1.0v
//
// Description : Binary tree use C to implemention
//
//==============================================================================

#include "BinTree.h"

int main(int argc, char *argv[])
{
BinTree tree;

InitBinTree(&tree);

cout<<"先序遍历法创建二叉树:";
CreateBinTree(&tree);

BinTree visit = tree;
cout<<"先序遍历:"<<endl;
PreOrderTraverse(visit);

cout<<"中序遍历:"<<endl;
visit = tree;
InOrderTraverse(visit);

cout<<"后序遍历:"<<endl;
visit = tree;
PostOrderTraverse(visit);

return 0;
}本回答被网友采纳

1编写递归算法,在二叉树中求位于先序序列中第k个位置的结点的值(写出算...
bool print(TreeNode *node, int &curTime, int k ){ curTime++;if (curTime == k){ printf("%c", node->value);return true;} return false;} \/\/起始curTime的值为0 bool FirstTraversalTree(TreeNode *root, int &curTime, int k){ if (root == NULL)return false;if (print(root...

编写程序,用先序递归遍历法建立二叉树的二叉链表存储结构,输出其先序...
include "malloc.h"define ELEMTYPE char BiTNode *bulid() \/*建树*\/ { BiTNode *q;BiTNode *s[20];int i,j;char x;printf("请按顺序输入二叉树的结点以输入0和*号结束\\n");printf("请输入要输入的为第几个结点i=\\n");scanf("%d",&i);printf("请输入你要输入该结点的数为x=");ge...

求数据结构二叉树查找结点及其父节点的代码,谢谢!!!
int n=1;\/\/1 5 8 0 0 0 6 0 0 void build_tree(int rt,int &num){\/\/构建二叉树 if(a[num]==0){\/\/a[num]==0,表示空结点 tree[rt].v=-1;} else { if(mp.count(a[num])==0)mp[a[num]]=rt;\/\/储存a[num]在树中的位置 tree[rt].v=a[num];\/\/结点赋值 num++;bu...

编写一个递归算法,统计并返回以BT为树根指针的二叉树中的叶子结点的个...
当x=NULL f(x)=0;当x左右子树为空 f(x)=1;其他 f(x)=f(bt->lchild)+f(bt-rchild)--- int Count(BTreeNode *BT){ int l,r;if(BT==NULL) return 0;else if(BT->Lchild==NULL&&BT->Rchild==NULL) return 1;else { l=Count(BT->Lchild);r=Count(BT->Rchild);re...

...结点指针为T,请写出计算二叉树中度为2的结点数目的非递归算法...
采用深度或者广度遍历就可以,分别采用栈或者队列结构。对于访问到的每个节点,如果度为2,就是所求的。比如用栈的话 push(ST,root)while(not empty(ST)){ node=pop(ST)if(node->left)push(ST,node->left)if(node->right)push(ST,node->right)} 上面的伪代码实际上就是图的深度遍历,二叉树...

写一个算法,交换一棵二叉树T的左右子树,要求使左子树根结点的关键字k小...
\/\/递归算法(更像伪代码)void swap(BT root){ if(root){ if(root.l&&root.r&&(*root.l).key>(*root.r).key){ BT p=(*root).l;(*root).l=(*root).r;(*root).r=p;} swap((*root).l);swap((*root).r);} }

二叉树先序非递归遍历C语言算法
printf(" 先序遍历 非递归算法 输出二叉树所有结点内容:\\n "); while(B!=NULL||s->top>0) { if(B!=NULL) { printf("%c ", B->data); s->data[s->top++]=B; B=B->Lchild; } else { B=s->data[--s->top]; B=B->Rchild; } }}int main(void){ srand((unsigned)time(NULL));...

一棵二叉树的先序、中序、后序序列分别如下,其中有一部分未显示出来。试...
中序最后多了个Q吧 根据二叉树遍历的性质可以逐步填满其中空格并还原二叉树如下:先序:ABDFKICEHJG 中序:DBKFIAHEJCG 后序:DKIFBHJEGCA

设一棵二叉树中各结点的值互不相同,其前序序列和中序序列分别存于两个...
int search(char ino[],char pre)\/\/在中序序列中查找先序中该元素所在位置 { int i=0;while(ino[i]!=pre&&ino[i])i++;if(ino[i]==pre)return i;else return -1;} void CrtBT(BitTree &T,char pre[],char ino[],int ps,int is,int n)\/*递归算法构造函数,建立二叉链表*\/ {...

编写算法:已知二叉排序树按二叉链表形式存储,树中结点各不相同,欲得...
首先看下二叉排序树的定义:二叉排序树(Binary Sort Tree)又称二叉查找树,亦称二叉搜索树。 它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、...

相似回答