二叉树建立,遍历和二叉排序树的判断【c++】

时间:2021-11-12 15:42:54
// test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std; typedef struct BTree{
char val;
struct BTree *lchild,*rchild;
}BTree; //先序建立二叉树
BTree * CreateBTree(BTree *T)
{
char value;
cin >> value;
if('#' == value)
T = NULL;
else
{
T = new BTree;
T->val = value;
cout<<"left of "<<T->val<<" :"<<endl;
T->lchild=CreateBTree(T->lchild);
cout<<"right of "<<T->val<<" :"<<endl;
T->rchild=CreateBTree(T->rchild);
}
return T;
}

/*建立二叉排序树*/
BTree* insertNode(BTree *Root,int value)
{
BTree* p=new BTree();
p->val=value;
p->lchild=NULL;
p->rchild=NULL;
if(Root==NULL)
{
Root=p;
return Root;
}
if(value<=Root->val)
Root->lchild=insertNode(Root->lchild,value);
else if(value>Root->val)
Root->rchild=insertNode(Root->rchild,value);
return Root;
} //先序遍历二叉树
void PreOrderTraverse(BTree* T){
if(T){
printf("%c ",T->val);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
} //中序遍历
void InOrderTraverse(BTree* T){
if(T){
InOrderTraverse(T->lchild);
printf("%c ",T->val);
InOrderTraverse(T->rchild);
}
}
//后序遍历
void PostOrderTraverse(BTree* T){
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c ",T->val);
}
}
//递归遍历二叉树是否为二叉排序树
int IsSearchTree(BTree *t)
{
if(!t) //空二叉树情况
return ;
else if(!(t->lchild) && !(t->rchild)) //左右子树都无情况
return ;
else if((t->lchild) && !(t->rchild)) //只有左子树情况
{
if(t->lchild->val>t->val)
return ;
else
return IsSearchTree(t->lchild);
}
else if((t->rchild) && !(t->lchild)) //只有右子树情况
{
if(t->rchild->val<t->val)
return ;
else
return IsSearchTree(t->rchild);
}
else //左右子树全有情况
{
if((t->lchild->val>t->val) || (t->rchild->val<t->val))
return ;
else
return ( IsSearchTree(t->lchild) && IsSearchTree(t->rchild) );
}
}
/*写法复杂,但代码少的判断二叉排序树的方法*/
int Prev=INT_MIN;
int JudgeBST(BTree *t){
int b1,b2;
if (t==NULL)
return ;
else{
b1=JudgeBST(t->lchild);
if (b1==||Prev>=t->val)
return ;
Prev=t->val;
b2=JudgeBST(t->rchild);
return b2;
}
} int main(int argc, char* argv[])
{
/*建立*/
BTree *root=new BTree();
printf("creating a binary tree with root:\n");
root=CreateBTree(root);
/*输出*/
PreOrderTraverse(root);
printf("\n");
InOrderTraverse(root);
printf("\n");
PostOrderTraverse(root);
printf("\n");
/*是否排序树*/
printf("%d\n",IsSearchTree(root));
printf("%d\n",JudgeBST(root)); system("pause");
return ;
}

二叉排序树即中序遍历结果为递增的二叉树,如:

二叉树建立,遍历和二叉排序树的判断【c++】

二叉树建立,遍历和二叉排序树的判断【c++】的更多相关文章

  1. 二叉树 - 建立与遍历使用Java

    二叉树的遍历(traversing binary tree)是指从根节点出发,按照某种次序依次访问二叉树中所有节点,使得每个节点仅被访问一次 前序遍历:若二叉树为空,则空操作返回null.否则先访问根 ...

  2. 12 二叉树-链式存储-二叉排序树(BST)

    呜呜 写这个东西花了我2天 居然花了两天!!我还要写AVL呢啊啊啊啊啊啊啊!!!!!! 等下还要跑去上自习 大早上起来脸都没洗现在先赶紧发博客 昨晚写出来了独自在其他人都睡着了的宿舍狂喜乱舞.. 迷之 ...

  3. java二叉树的遍历&lpar;1&rpar;

    树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合.它是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合 节点:上图的圆圈,比如A,B,C等都是表示 ...

  4. 【PHP数据结构】二叉树的遍历及逻辑操作

    上篇文章我们讲了许多理论方面的知识,虽说很枯燥,但那些都是我们今天学习的前提,一会看代码的时候你就会发现这些理论知识是多么地重要了.首先,我们还是要说明一下,我们学习的主要内容是二叉树,因为二叉树是最 ...

  5. &lbrack;Leetcode&rsqb; Binary tree level order traversal二叉树层次遍历

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  6. javascript实现数据结构: 树和二叉树&comma;二叉树的遍历和基本操作

    树型结构是一类非常重要的非线性结构.直观地,树型结构是以分支关系定义的层次结构. 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构:在数据库系统中,可用树来组织信息:在分 ...

  7. 剑指offer第二版-总结:二叉树的遍历

    思想:前序(根左右),中序(左根右),后序(左右根) 前序非递归遍历: 首先判断根是否为空,将根节点入栈 1.若栈为空,则退出循环 2.将栈顶元素弹出,访问弹出的节点 3.若弹出的节点的右孩子不为空则 ...

  8. 二叉树的遍历(递归,迭代,Morris遍历)

    二叉树的三种遍历方法: 先序,中序,后序,这三种遍历方式每一个都可以用递归,迭代,Morris三种形式实现,其中Morris效率最高,空间复杂度为O(1). 主要参考博客: 二叉树的遍历(递归,迭代, ...

  9. C&plus;&plus; 二叉树深度优先遍历和广度优先遍历

    二叉树的创建代码==>C++ 创建和遍历二叉树 深度优先遍历:是沿着树的深度遍历树的节点,尽可能深的搜索树的分支. //深度优先遍历二叉树void depthFirstSearch(Tree r ...

随机推荐

  1. jquery的全选插件

    全选看起来挺简单的,要做得完美就不那么容易了. 目前,我的全选插件能做到以下6点: 1.点击全选checkbox,能将要选择的checkbox都选中.去掉全选按钮,能将所有的checkbox都不选.这 ...

  2. hdu acm 2082 找单词

    找单词 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  3. IAR EWARM Example Download List

    https://srv.iar.com/ExamplesOnDemand/versions.xml http://netstorage.iar.com/SuppDB/Public/EXAMPLES/0 ...

  4. cocos2d-x 纹理源码分析

    转自:http://blog.csdn.net/honghaier/article/details/8068895 当一张图片被加载到内存后,它是以纹理的形式存在的.纹理是什么东西呢?纹理就是一块内存 ...

  5. 伪装隐藏Nginx&comma;PHP版本号提升服务器安全性

    可能有时候我们看某些站点想知道别人在使用什么版本的web服务器之类的信息时,却发现并未显示版本号,甚至连WEB服务器都有变化,可以通过以下 方法来隐藏Nginx.PHP的版本号信息,来提升一定的安全性 ...

  6. iOS 注册密码加密 添加了时间戳 遇到的问题&period;&period;&period;

    今天项目 遇到一个事故,我本想用 一个形容这个事故的adj  算了 既然 叫事故 已经能表达我们处于的一种状态, 是这样的: 有小部分用户反应 app无法注册 总提示密码错误的情况 实际 该步骤 已经 ...

  7. &period;net core读取json配置文件

    一.新建.net core控制台程序 二.通过Nuget引入 Microsoft.Extensions.Configuration和microsoft.extensions.configuration ...

  8. Visual C&plus;&plus; 6&period;0中关于for的简单问题

      在这个循环当中,要先执行①,再执行②,再执行④,再执行③,如果还满足②的话就再执行②,再依次执行.当③不满足②时,就执行printf语句. 并且在这个循环当中,①只执行一次.

  9. wamp解决ajax跨域问题

    若使用ajax测试本地数据时,遇到的跨域问题,如 因为ajax只能用于请求服务器的数据,而在本地测试,打开的文件是以 file:// 的形式, 所以报错 可以通过 nginx 建立反向代理,处理静态文 ...

  10. hosts文件介绍

    在Window系统中有个Hosts文件(没有后缀名),在Windows98系统下该文件在Windows目录,在Windows2000/XP系统中位于C:\Winnt\System32\Drivers\ ...