编写递归算法,在二叉树中求位于先序序列中第K个位置的结点?以及用非递归算法做一下

如题所述

第1个回答  2012-12-10
typedef struct bitnode
{
  char data;
  struct bitnode *father;
  struct bitnode *lchild, *rchild;
}bitnode, *bitree;

int fun(int k,bitnode *head)
{
  int i=1,j=0;
  if(head->lchild!=null)
   j=fun(k,head->lchild);
  if(j+1==k)
  printf("%c",head->data);
  if(head->rchild!=null)
  i=fun(k,head->rchild);
  return i+j;
}本回答被网友采纳

1编写递归算法,在二叉树中求位于先序序列中第k个位置的结点的值(写出算...
使用先序遍历二叉树的算法即可解决,只需要修改输出结点值的方法即可。输出方法修改为计数方式,计数到第K次输出是才进行真实输出即可,例如:bool print(TreeNode *node, int &curTime, int k ){ curTime++;if (curTime == k){ printf("%c", node->value);return true;} return false;} \/\/...

二叉树先序非递归遍历C语言算法
if(ch!='#'&&ch!='\\n') \/* 输入二叉树先序顺序 是以完全二叉树的先序顺序 不是完全二叉树的把没有的结点以#表示 *\/ {ht=(bitree *)malloc(sizeof(bitree)); ht->data=ch; ht->lchild=ht->rchild=NULL; p=ht; initstack(s); push(s,ht); \/\/根节点进栈 while((ch=getchar())!='\\...

编写程序,用先序递归遍历法建立二叉树的二叉链表存储结构,输出其先序...
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...

建立二叉树,层序、先序、中序、后序遍历( 用递归或非递归的方法都需要...
Postorder(T->lchild); \/\/后序遍历左子树 Postorder(T->rchild); \/\/后序遍历右子树 printf("%c",T->data); \/\/访问结点 } } \/\/===采用后序遍历求二叉树的深度、结点数及叶子数的递归算法=== int TreeDepth(BinTree T){ int hl,hr,max;if(T){ hl=TreeDepth(T->lchild);...

...结构,先序、中序、后序遍历二叉树(要求任选某一种用非递归算法...
后序遍历二叉树(要求任选某一种用非递归算法完成); 3、查询二叉树中指定结点;

...结点指针为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)} 上面的伪代码实际上就是图的深度遍历,二叉树...

用递归算法先序中序后序遍历二叉树
1、先序 void PreOrderTraversal(BinTree BT){ if( BT ){ printf(“%d\\n”, BT->Data); \/\/对节点做些访问比如打印 PreOrderTraversal(BT->Left); \/\/访问左儿子 PreOrderTraversal(BT->Right); \/\/访问右儿子 } } 2、中序 void InOrderTraversal(BinTree BT){ if(BT){ InOrde...

7.写出二叉树中序遍历的非递归算法。 8.编写求二叉树深度的算法。 9...
void coutBT(BiTNode *t,int &m,int &n,int &i)\/\/4、计算二叉树中叶子结点、度为2的结点和度为1的结点的个数 { if(!EmptyBT(t)){ if((t->lchild==0) && (t->rchild==0))m++;\/\/叶子结点 else if((t->lchild!=0) && (t->rchild!=0))i++;\/\/度为2的结点 else n++;\/...

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

已知某二叉树先序遍历序列为ABCDEFH,中序遍历序列是BDCEAHF
我们来举个简单的例子,先序序列为:ABDECF,中序序列为:DBEAFC。算法思想:先序遍历树的规则为中左右,可以看到先序遍历序列的第一个元素必为树的根节点,比如上例中的A就为根节点。再看中序遍历为:左中右,再根据根节点A,可知左子树包含元素为:DBE,右子树包含元素:FC。然后递归的 进行左...

相似回答