zoukankan      html  css  js  c++  java
  • 遍历二叉查找树

    1002. 二叉查找树的遍历
     
     
    Total: 111 Accepted: 73
     
         
         
     
    Time Limit: 1sec    Memory Limit:256MB
    Description

    给定一组无序整数,以第一个元素为根节点,生成一棵二叉搜索树,对其进行中序遍历和先序遍历。

    Input
    输入包括多组测试数据,每组测试数据包含两行:第一行为整数m(1<=m<=3000),表示该组数据中整数的数目,第二行给出m个整数,相邻整数间用一个空格间隔。最后一组测试数据后紧跟着包含0的一行输入,标识输入的结束。
    Output
    每组测试数据产生两行输出,第一行是中序遍历结果,第二行是先序遍历结果,每个整数后面带一个空格(包括最后一个整数),每行中第一个整数前无空格。
    Sample Input
     Copy sample input to clipboard
    9
    10 4 16 9 8 15 21 3 12
    6
    20 19 16 15 45 48
    0
    
    Sample Output
    3 4 8 9 10 12 15 16 21
    10 4 3 9 8 16 15 12 21
    15 16 19 20 45 48
    20 19 16 15 45 48
    #include<iostream>
    using namespace std;
    
    struct BitNode
    {
    	int data;
    	BitNode* lchild;
    	BitNode* rchild;
    };
    
    //重建二叉查找树
    void build(BitNode* T, int num)
    {
    	//if bigger than the root
    	if(T->data>num)
    	{
    		if(!T->lchild)  //if no have left son
    		{
    			BitNode* lt=new BitNode();
    			lt->data=num;
    			lt->lchild=NULL;
    			lt->rchild=NULL;
    			T->lchild=lt;
    		}
    		else          // if have left son, recurise
    			build(T->lchild, num);
    	}
    	else   //if smaller than the root
    	{
    		if(!T->rchild)
    		{
    			BitNode* rt=new BitNode();
    			rt->data=num;
    			rt->lchild=NULL;
    			rt->rchild=NULL;
    			T->rchild=rt;
    		}
    		else
    			build(T->rchild, num);
    	}
    }
    
    //前序遍历
    void preorder(BitNode* T)
    {
    	if(T)
    	{
    		cout<<T->data<<" ";
    		preorder(T->lchild);
    		preorder(T->rchild);
    	}
    }
    
    //中序遍历
    void inorder(BitNode* T)
    {
        if(T)
        {
        	inorder(T->lchild);
        	cout<<T->data<<" ";
            inorder(T->rchild);
        }
    }
    
    int main()
    {
        int n;
    
        while(cin>>n&&n)
        {
        	int num;
    
            BitNode* T=new BitNode();
            cin>>num;
            T->data=num;
            T->lchild=NULL;
            T->rchild=NULL;
            while(--n>0)
            {
            	cin>>num;
            	build(T, num);
            }
    
            inorder(T);
            cout<<endl;
            preorder(T);
            cout<<endl;
        }
    
        return 0;
    }
    

      

  • 相关阅读:
    LeetCode Reverse Nodes in k-Group
    LeetCode Unique Binary Search Trees II
    Binary Tree Zigzag Level Order Traversal
    JavaWeb--JSP
    Java--面向对象
    javaScript-进阶篇(三)
    javaScript-进阶篇(二)
    java--常用类
    javaScript-进阶篇(一)
    Java--数组
  • 原文地址:https://www.cnblogs.com/KennyRom/p/6209212.html
Copyright © 2011-2022 走看看