2489: 进击的二叉查找树 (二叉树的操作)

标签: 二叉树
15人阅读 评论(0) 收藏 举报
分类:


#include<stdio.h>
#include<queue>
#include<algorithm>
using namespace std;
	int n;
struct Node{
	int data;
	Node *lchild,*rchild;
	Node(int e):data(e),lchild(NULL),rchild(NULL){}
	
	
};
//二叉树插入 
	Node *  insert(Node *T,int num){
		if(T==NULL)
		return new Node(num);
		if(num<T->data) T->lchild=insert(T->lchild,num);
		else T->rchild=insert(T->rchild,num);
		return  T;
	}
//判断两个二叉树是否相同 
int judge(Node *r,Node *r1){
	if(!r&&!r1)
	return 1;
	else if(r&&r1){
		if(r->data==r1->data)
		return judge(r->lchild,r1->lchild)&&judge(r->rchild,r1->rchild);
	}
	return 0;
}
//前序遍历 
void postra(Node *r,int &w)
{
    if(r){
        postra(r->lchild,w);
        postra(r->rchild,w);
        ++w==n?printf("%d\n",r->data):printf("%d ",r->data);
    }
}
//层序遍历 
void levtra(Node *r)
{
    queue<Node *> q;
    q.push(r);
    int w=0;
    while(!q.empty())
    {
        Node *s=q.front();
        q.pop();
        ++w==n?printf("%d\n",s->data):printf("%d ",s->data);
        if(s->lchild) q.push(s->lchild);
        if(s->rchild) q.push(s->rchild);
    }
}
//中序遍历 level为层数
void InOrderTraverse(Node* T,int level){
	if(T==NULL)
	return;
	InOrderTraverse(T->lchild,level+1);
	
	//operation1(T->data);
	printf("%d",T->data); 
	
	InOrderTraverse(T->rchild,level+1);
}
//后序遍历
void PostOrderTraverse(Node* T,int level)
{
	if(T==NULL)
	return;
	PostOrderTraverse(T->lchild,level+1);
	PostOrderTraverse(T->rchild,level+1);
	
	//operation1(T->data);
	printf("%d",T->data); 
}
int main(){
	freopen("in.txt","r",stdin);
	scanf("%d",&n);
	Node * root = NULL;
	
	for(int i=1;i<=n;i++){
		int e;
		scanf("%d",&e);
		root=insert(root,e);
	}
	Node * root1 = NULL;
	
	for(int i=1;i<=n;i++){
		int e;
		scanf("%d",&e);
		root1=insert(root1,e);
	}
	if(judge(root,root1)==1)
	printf("YES\n");
	else printf("NO\n");
	
	int w=0;
	postra(root,w);
	levtra(root);
	/*InOrderTraverse(root,0);
	puts("");
	PostOrderTraverse(root,0);*/
	return 0;
}

查看评论

*浙大PAT甲级 1099层次遍历二叉查找树

先通过输入进行建树,然后根据中序遍历对应从小到大的数,再进行bfs进行层次遍历。 AC代码: #include #include #include #include #include #inclu...
  • luowei5513
  • luowei5513
  • 2016-09-07 16:00:27
  • 167

二叉查找树(c语言实现)

二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的...
  • schoolers
  • schoolers
  • 2010-03-30 09:38:00
  • 2698

二叉树的性质以及二叉查找树的基本操作

1、基本概念 树(Tree)是n(n≥0)个结点的有限集。在任意一棵非空树中:(1)有且仅有一个特定的被称为根(Root)的结点;(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,...
  • ls5718
  • ls5718
  • 2016-08-06 11:18:28
  • 818

二叉查找树的查找、插入、删除、释放等基本操作的实现(C语言)

二叉查找树是一种特殊性质的二叉树,该树中的任何一个节点,它的左子树(若存在)的元素值小于节点的元素值,右子树(若存在)的元素值大于节点的元素值。 实现了二叉树查找树的实现以及基本操作,包括查找、插入、...
  • mcu_tian
  • mcu_tian
  • 2016-06-14 11:31:39
  • 3861

C语言实现二叉查找树(BST)的基本操作

我们在上一篇博客中讲解了二叉树,这一次我们来实现二叉树的进阶——二叉查找树(Binary Search Tree),又称二插排序树(Binary Sort Tree)。所以简称为BST。二插查找树的定...
  • CHENYUFENG1991
  • CHENYUFENG1991
  • 2016-03-16 00:23:08
  • 7938

数据结构-二叉树和二叉查找树

先按树-二叉树-二叉查找树的顺序解释会比较清楚。 一,树 树(Tree)是n(n≥0)个结点的有限集。在任意一棵非空树中: (1)有且仅有一个特定的被称为根(Root)的结点; (2)当n>1...
  • tuke_tuke
  • tuke_tuke
  • 2015-12-20 17:44:30
  • 2386

问题 B: 进击的二叉查找树

题目描述给定1~N的两个排列,使用这两个排列分别构建两棵二叉查找树(也就是通过往一棵空树中依次插入序列元素的构建方式)。如果这两棵二叉查找树完全相同,那么输出YES;否则输出NO。之后,输出第一个排列...
  • linCurry
  • linCurry
  • 2017-03-12 10:38:48
  • 232

二叉搜索树的基本操作(查找、插入、删除)【数据结构】

二叉查找树     二叉查找树(BinarySearch Tree,也叫二叉搜索树,或称二叉排序树Binary Sort Tree)或者是一棵空树,或者是具有下列性质的二叉树:     (...
  • u010552731
  • u010552731
  • 2015-08-09 16:41:56
  • 622

二叉查找树、平衡二叉树、红黑树、B-/B+树性能对比

前言:BST、AVL、RBT、B-tree都是动态结构,查找时间基本都在O(longN)数量级上。下面做出详细对比。 1. 二叉查找树 (Binary Search Tree) 概念 ...
  • z702143700
  • z702143700
  • 2015-10-12 20:43:16
  • 6331

二叉搜索树的定义、查找、插入和删除

二叉搜索树的定义 二叉搜索树,也称有序二叉树,排序二叉树,是指一棵空树或者具有下列性质的二叉树: 1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 2. 若任意节点的...
  • yanxiaolx
  • yanxiaolx
  • 2016-07-21 21:59:00
  • 9245
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 2611
    排名: 1万+