二叉树建立,遍历和二叉排序树的判断【c++】
2016-09-21 20:24
381 查看
// 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 1; else if(!(t->lchild) && !(t->rchild)) //左右子树都无情况 return 1; else if((t->lchild) && !(t->rchild)) //只有左子树情况 { if(t->lchild->val>t->val) return 0; else return IsSearchTree(t->lchild); } else if((t->rchild) && !(t->lchild)) //只有右子树情况 { if(t->rchild->val<t->val) return 0; else return IsSearchTree(t->rchild); } else //左右子树全有情况 { if((t->lchild->val>t->val) || (t->rchild->val<t->val)) return 0; else return ( IsSearchTree(t->lchild) && IsSearchTree(t->rchild) ); } } /*写法复杂,但代码少的判断二叉排序树的方法*/ int Prev=INT_MIN; int JudgeBST(BTree *t){ int b1,b2; if (t==NULL) return 1; else{ b1=JudgeBST(t->lchild); if (b1==0||Prev>=t->val) return 0; 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 0; }
二叉排序树即中序遍历结果为递增的二叉树,如:
相关文章推荐
- 二叉树(二叉排序树)的建立以及遍历
- c++ 二叉树 的递归建立和递归遍历
- (C++)二叉树的建立与递归方式遍历
- [C/C++] 先序建立二叉树| 先序、中序、后序遍历二叉树| 求二叉树深度、节点数、叶节点数 算法实现
- 二叉树——判断两棵二叉树是否相等(先序和中序遍历序列建立二叉树)
- 数据结构_树_二叉树的建立、遍历、复制与移除_二叉链表存储_C++实现
- C++二叉树的前序建立与前中后遍历
- C++二叉树的建立与遍历
- 二叉排序树的建立、插入、删除、查找、4种遍历 C++完整实现
- 二叉树相关操作(先序建立二叉树、求子节点数量,判断是否为平衡二叉树,先序遍历,中序遍历,后序遍历)
- c++二叉树的非递归建立和遍历
- C++ 二叉树建立,遍历
- 二叉树的建立与递归遍历C++版
- C++实现二叉树的建立和三种递归遍历
- 二叉树的建立与遍历(一)(c++实现)
- 二叉树的建立与遍历(二)(c++实现)
- C++数据结构--二叉树的建立,前序遍历,中序遍历和后序遍历
- 二叉树的建立以及遍历C/C++
- C++二叉树的建立与遍历
- 二叉树的先序建立与非递归遍历C++版