• 建立二叉排序树_三种顺序遍历


    题目描述

    输入一系列整数,建立二叉排序树,并进行前序,中序,后序遍历。

    输入描述:

    输入第一行包括一个整数n(1<=n<=100)。
    接下来的一行包括n个整数。

    输出描述:

    可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。
    每种遍历结果输出一行。每行最后一个数据之后有一个空格。

    输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。

    分析

    编写insert函数

    #include <iostream>
    using namespace std;
    
    struct tree_node{
    	int data;
    	tree_node *left;
    	tree_node *right;
    
    	tree_node(int x):data(x), left(NULL), right(NULL){} //初始化一个结点
    };
    
    
    void insert(int x, tree_node *root){
    	if(x == root -> data) return;
    	if(x < root -> data){
    		if(!root -> left)//如果左边为空
    			root -> left = new tree_node(x);//则以x建立一个结点,并且插入左边
    		else
    			insert(x, root -> left);否则,左边不空,递归插入左子树
    	}else{
    		if(!root -> right)// 右子树为空
    			root -> right = new tree_node(x);// 直接插入右边
    		else
    			insert(x, root -> right);// 否则递归插入右子树
    	}
    }
    
    
    void pre_order(tree_node *root){
    	if(!root) return; // 树为空 直接返回
    	cout << root -> data << " ";//先序遍历,先输出根节点
    	pre_order(root -> left); //递归遍历左子树
    	pre_order(root -> right);// 递归遍历右子树
    }
    
    void in_order(tree_node *root){
    	if(!root) return;
    	in_order(root -> left);
    	cout << root -> data << " ";
    	in_order(root -> right);
    }
    
    void post_order(tree_node *root){
    	if(!root) return;
    	post_order(root -> left);
    	post_order(root -> right);
    	cout << root -> data << " ";
    }
    
    int main(){
    	int n;
    	while(cin >> n){
    		int x;
    		cin >> x;
    		tree_node root(x);
    		--n;
    		while(n--){
    			cin >> x;
    			insert(x, &root);
    		}
    		pre_order(&root); cout << endl;
    		in_order(&root); cout << endl;
    		post_order(&root);cout << endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    第四次作业
    第二次上机作业
    5.21上机作业
    第十一周课后作业
    第十一周上机练习
    第10周java作业
    第9次上级联系
    第8周作业
    第八周上机练习
    第七周作业
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10264461.html
Copyright © 2020-2023  润新知