zoukankan      html  css  js  c++  java
  • hdu 3999The order of a Tree

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3999

    本题为简单二叉排序树,先按排序树创建树,然后先序遍历二叉树,输出的时候最后一个数字后面没有空格。

    数组实现:

    #include<stdio.h>
    #include<string.h>
    #define N 100005
    int tree[N],left[N],right[N],a[N],num,flg;//tree数组用来保存树节点的值,left,right数组用来保存结点的左右子树,
    void insert(int index,int x)
    {
    	if( x <= tree[index] )//当根结点比x的值大 的时候。
    	{
    		if(left[index] == -1)//当根结点左子树为空的时候。
    			left[index] = flg;
    		else
    			insert(left[index],x);//左子树不为空时继续遍历左子树
    	}
    	else
    		{
    			if(right[index] == -1)//当右子树为空时
    				right[index] = flg;
    			else
    				insert(right[index],x);//当右子树不为空的时候
    		}
    }
    void PreOrderTraverse(int index)//先序遍历二叉排序树
    {
    	a[num++] = tree[index];
    	if(left[index] != -1)
    		PreOrderTraverse(left[index]);
    	if(right[index] != -1)
    		PreOrderTraverse(right[index]);
    }
    int main()
    {
    	int n,i,x,root;
    	while(~scanf("%d",&n))
    	{
    		//初始化树的所有结点都为空。
    		memset(left,-1,sizeof(left));
    		memset(right,-1,sizeof(right));
    		root = -1;
    		flg = 0;
    		for(i = 0; i< n; i++)
    		{
    			scanf("%d",&x);
    			if(root == -1)
    				tree[++root] = x;
    			else
    			{
    				tree[++flg] = x;
    				insert(root,x);
    			}
    		}
    		num = 0;
    		PreOrderTraverse(root);
    		printf("%d",a[0]);
    		for(i = 1; i <= n -1; i++)
    			printf(" %d",a[i]);
    		printf("\n");
    	}
    	return 0;
    }


     

    动态创建二叉树排序树

    #include<stdio.h>
    #include<stdlib.h>
    struct node
    {
    	int data;
    	struct node *left;
    	struct node *right;
    };
    int b[100005],num,n;
    void delete_tree(node *t)
    {
    	if(t->left)
    		delete_tree(t->left);
    	if(t->right)
    		delete_tree(t->left);
    	free(t);
    }
    node* insert(node *t,int x)
    {
    	if(t)
    	{
    		if(x < t->data)
    			t->left = insert(t->left,x);
    		else
    			t->right = insert(t->right,x);
    	}
    	else
    	{
    		t = (node*)malloc(sizeof(node));
    		t->data = x;
    		t->left = t->right = NULL;
    	}
    	return t;
    }
    void PreOrderTraverse(node *t)
    {
    	if(t == NULL)
    		return ;
    	b[num++] = t->data;
    	PreOrderTraverse(t->left);
    	PreOrderTraverse(t->right);
    	free(t);
    }
    node *create(node *t)
    {
    	int i,x;
    	for(i = 0; i < n; i++)
    	{
    		scanf("%d",&x);
    		t = insert(t,x);
    	}
    	return t;
    }
    int main()
    {
    	int i;
    	node *root;
    	while(~scanf("%d",&n))
    	{
    		root = NULL;
    		root = create(root);
    		num = 0;
    		PreOrderTraverse(root);
    		printf("%d",b[0]);
    		for(i = 1; i < n; i++)
    			printf(" %d",b[i]);
    		printf("\n");
    	}
    	return 0;
    }


     

  • 相关阅读:
    不用写代码的框架
    bat执行python脚本,执行多条命令
    VMware-workstation-full-15.1.0-13591040安装破解-附件密钥
    w10谷歌chrome关闭自动更新
    谷歌安装提示已经安装高版本解决
    python项目三方库导出导入 requirements.txt文件
    点阴影
    goto gamedev blog
    20135315-信息安全系统设计基础第五周学习总结
    win10 +python3.6环境下安装opencv以及pycharm导入cv2有问题的解决办法
  • 原文地址:https://www.cnblogs.com/LUO257316/p/3220835.html
Copyright © 2011-2022 走看看