下面给出两个关于二叉树的题目:

1.编写程序任意输入二叉树的结点个数和结点值,构造一棵二叉树,采用三种递归遍历算法(前序、中序、后序)对这棵二叉树进行遍历并计算出二叉树的高度

2 .编写程序生成下面所示的二叉树,并采用先序遍历的非递归算法对此二叉树进行遍历。

  

 

下面实现这两个题目:

1.

#include "stdafx.h"
#include"iostream.h"
#include"stdlib.h"
#include"stdio.h"
#include<stack>
using namespace std;
#define NULL 0
#define OK 1
#define OVERFLOW -1
typedef int Status;
typedef struct node
{char data;struct node *lchild;struct node *rchild;
}*bitree;
int k=0;
int depth(bitree T)//树的高度
{ if(!T)return 0; else { int m=depth(T->lchild); int n=depth(T->rchild); return (m>n?m:n)+1; }
}
//先序,中序 建树
struct node *create(char *pre,char *ord,int n)
{struct node * T;int m;T=NULL;if(n<=0){return NULL;}else {m=0;T=new(struct node);T->data=*pre;T->lchild=T->rchild=NULL;while(ord[m]!=*pre)m++;T->lchild=create(pre+1,ord,m);T->rchild=create (pre+m+1,ord+m+1,n-m-1);return T;}
}
//中序递归遍历
void inorder(struct node *T)
{if(!T)return;else{inorder(T->lchild );cout<<T->data;inorder(T->rchild );}
}
void inpre(struct node *T)
{if(!T)return;else{cout<<T->data;inpre(T->lchild );inpre(T->rchild );}
}
void postorder(struct node *T)
{if(!T)return;else{postorder (T->lchild );postorder (T->rchild );cout<<T->data;}
}
//先序非递归遍历
void inpre1(struct node *T)
{struct node *p;struct node *stack[20];int top=0;p=T;cout<<"非递归先序 ";while(p||top!=0){while (p){stack[top++]=p;cout<<p->data;p=p->lchild;}p=stack[--top];p=p->rchild ;}
}
//中序非递归遍历
void inorder1(struct node *T)
{struct node *p;struct node *stack[20];int top=0;p=T;cout<<"非递归中序 ";while(p||top!=0){while (p){stack[top++]=p;p=p->lchild ;}p=stack[--top];cout<<p->data;p=p->rchild ;}
}
//主函数
int main()
{bitree T;char pre[30],ord[30];int n,m;gets(pre);gets(ord);n=strlen(pre);T=create(pre,ord,n);inpre(T);cout<<endl;postorder (T);cout<<endl;inorder(T);cout<<endl;inpre1(T);cout<<endl;inorder1(T);cout<<endl;m=depth(T);cout<<"二叉树高度为:"<<m<<endl;return 0;
}

2.

#include "stdafx.h"
#include"iostream.h"
#include"stdlib.h"
#include"stdio.h"
#include<stack>
using namespace std;#define NULL 0
#define OK 1
#define OVERFLOW -1
typedef int Status;
typedef struct node
{char data;struct node *lchild;struct node *rchild;
}*bitree;Status Create(bitree &T)  //按先序次序输入二叉树中结点的值,!表示空树
{char e;cout<<"输入树的元素:"<<endl;cin>>e;if(e=='!') T=NULL;else{if(!(T=(node *)malloc(sizeof(node))))exit (OVERFLOW);T->data=e;Create(T->lchild);Create(T->rchild);}return OK;}//先序非递归遍历
void inpre(struct node *T)
{struct node *p;struct node *stack[20];int top=0;p=T;cout<<"非递归先序 ";while(p||top!=0){while (p){stack[top++]=p;cout<<p->data;p=p->lchild;}p=stack[--top];p=p->rchild ;}
}
//主函数
int main()
{bitree T;Create(T);cout<<"输出的元素为:"<<endl;inpre(T);return 0;
}

数据结构--二叉树的创建和相关操作相关推荐

  1. 双向链表的创建和相关操作

    http://blog.csdn.net/jw903/article/details/38947753 双向链表其实是单链表的改进. 当我们对单链表进行操作时,有时你要对某个结点的直接前驱进行操作时, ...

  2. ORCL创建用户相关操作

    ORCL创建用户相关操作 -- 0.查询表空间文件保存路径 select * from v$datafile --1. 创建表空间 create tablespace jcsjv1 datafile ...

  3. 数据结构(单链表的相关操作)

    为什么80%的码农都做不了架构师?>>>    #include <stdio.h> #include <stdlib.h> #define ElemType ...

  4. [PHP] 数据结构-二叉树的创建PHP实现

    1.利用递归的原理,只不过在原来打印结点的地方,改成了生成结点,给结点赋值的操作 if(ch=='#'){*T=NULL;}else{malloc();(*T)->data=ch;createF ...

  5. 关于学习Python的一点学习总结(9->字典创建及相关操作)

    27.创建和使用字典:字典由键及其相应的值组成,这种键值对称为项(item) 方法一: >>> name={'Hongkong':'45','shanghai':'67','gui ...

  6. Python写数据结构:二叉树的创建和遍历

    #!/usr/bin/python3.5 #_*_coding:utf-8_*_class Node:def __init__(self,value):self.data = valueself.lc ...

  7. 【数据结构】二叉树及其相关操作

    二叉树的定义 二叉树是一个由结点构成的有限集合,这个集合或者为空,或者由一个根节点及两棵互不相交的分别称作这个根节点的左子树和右子树的二叉树组成. 二叉树并非一般的树形结构的特殊形式,它们是两种不同的 ...

  8. 数据结构源码笔记(C语言):二叉平衡树的相关操作算法

    //二叉平衡树的相关运算 #include<stdio.h> #include<malloc.h> #include<string.h>typedef char I ...

  9. 数据结构之堆(Heap),堆的相关操作,用堆模拟优先级队列

    目录 堆的概念 堆的存储方式 堆的相关操作 堆的向下调整. 堆的创建 堆的插入和向上调整 堆的删除 用堆模拟优先级队列 堆的概念 堆是逻辑结构为二叉树存储结构为数组数组的一种数据结构,为什么这么说呢? ...

最新文章

  1. # Error in colSums(iris) : ‘x‘ must be numeric,# Error in rowSums(iris) : ‘x‘ must be numeric
  2. 编译程序加不加 -lpthread 的区别【转】
  3. Elasticsearch Top 51 重中之重面试题及答案
  4. 【坐在马桶上看算法】算法4:队列——解密QQ号
  5. Monkey脚本编写
  6. 光端机的技术指标及构成有哪些?
  7. Idea Maven报错找不到程序包
  8. 查看网卡命令 uefi_大神教你开机进入UEFI模式的方法,非常简单
  9. 硬盘对应计算机主板,主板硬盘一般有哪些接口
  10. mysql5.6编译
  11. c++ 无法读取内存_为什么内存频率只有2133比实际低?开XMP提高内存频率方法
  12. git 取消head的游离状态
  13. 3.8086/8088微处理器结构
  14. origin数据平滑_科学网-关于origin曲线平滑处理 lowess-叶小球的博文
  15. 苹果公司为什么储备那么多现金?
  16. 2015软件设计师考试(英语部分)
  17. C#转换Excel表格中的科学计数法数字
  18. Box2D 中文手册
  19. 7-2 大小写字母转换
  20. mac m1使用picGo + gitee搭建免费图床

热门文章

  1. Jfinal 2.1 集成 Guice,实现注解功能, 加入Service接口和实现类,直接晒代码
  2. HeadFirst 设计模式 - Chapte5 单例模式
  3. 计算机视觉与图像处理相关的国内外重要期刊汇总
  4. 最大输入hdu 2534 规律水题 求任意个a,b的和 不能表示的最大的数
  5. vue-cli Invalid Host header
  6. 敲山震虎?继MongoDB之后,AWS又对Elasticsearch下手了
  7. orabbix 报错No suitable driver found for
  8. NetCore TagHelpers标签
  9. makefile使用.lds链接脚本以及 $@ ,$^, $, 解析
  10. LeetCode - Add Binary