// 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++】的更多相关文章

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

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

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

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

  3. java二叉树的遍历(1)

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

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

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

  5. [Leetcode] 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实现数据结构: 树和二叉树,二叉树的遍历和基本操作

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

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

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

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

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

  9. C++ 二叉树深度优先遍历和广度优先遍历

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

随机推荐

  1. VS 报cmath(19): error C2061: 语法错误: 标识符“acosf” 错误

    这是因为我在.c文件中用了 #include <iostream> using namespace std; 这样编译的时候就报: 出现错误类型如下:1>c:\program fil ...

  2. Swift来的正是时候

    早期对ObjectiveC这玩意不是很感冒,一直没有动手搞Apple平台下的开发,现在Swift来了,时机成熟,提升门槛后的IOS,才是量子本人想弄的.现在不用担心搞ObjectiveC的走在前面了. ...

  3. phpstorm 激活服务器

    phpstorm 激活服务器 http://jetbrains.tencent.click/ (2016-09-19 可用) webstorm 激活服务器 http://owo.help(2016-0 ...

  4. 递推 hdu 2048

    t 关于错排 共n个数 第n个 和一个交换  其他n-2错排  (n-1)*z[n-2]; n-1个错排 第n个和n-1个交换    (n-1)*z[n-1]; 求和 然后概率的话要除n! 一个一个除 ...

  5. linux red hat 给普通用户开启root权限

    环境:虚拟机:red hat 6.5:root角色用户:普通用户:宏基笔记本:win7: 操作过程: 1.登录普通用户,进入图形界面(可以设置为启动登录进入命令行界面): 2.按Crl+ALT+F2进 ...

  6. bzoj4498: 魔法的碰撞

    首先,如果排列确定,那么就可以组合学解决了,不过排列数很多,显然不能枚举. 我们发现如果区间不能重叠的话,总长度减去所有区间长度就是能用的多余格子数. 然而相邻区间可以重叠较小区间一半的长度,因此这些 ...

  7. 移动端浏览器和微信浏览器上禁止body的滚动条

    一般禁止body滚动的做法就是设置overflow:hidden. 但是很奇怪的发现在移动端浏览器和微信浏览器上这个不起作用,然后我分析了我的写法,就是在body上加了一个class去定义属性,然后改 ...

  8. Android实现透明式状态栏

    Android实现透明式状态栏 1. 修改style样式 2.  创建values-v19文件夹 3.  在这个文件夹下创建style.xml 4.  对activity_main.xml进行修改 移 ...

  9. hdu 1410

    Ref : http://www.clanfei.com/2012/04/772.html 可推出公式: ans=sigma[C(N1-1,i)*0.5^(N1+i)] (0<=i<=N2 ...

  10. Android Studio中JNI程序的单步调试和日志打印

    近日有个算法(检测碰撞)需要用C++实现,目的是IOS和ANDROID中共享同一段程序. 下面说说android调用这段程序过程中遇到的一些事情.(过程中网上搜索了一些相关文章,大部分说的是eclip ...