码迷,mamicode.com
首页 > 编程语言 > 详细

树算法专题(四)二叉查找树

时间:2020-03-17 17:55:34      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:图片   space   pac   测试   stream   ret   cst   删除   int   

一、基本操作

1、查找

技术图片

2、插入

技术图片

技术图片

3、建立

技术图片

4、删除

技术图片

技术图片

二、问题

技术图片

技术图片

7
8 6 5 7 10 8 11
7
8 10 11 8 6 7 5
7
8 6 8 5 10 9 11

测试代码:

     //0
        cout<<"origin:";
        for(int i=0;i<(int)origin.size();i++){
            cout<<origin[i]<<" ";
        }
        cout<<endl;
        //1
        cout<<"pre:";
        for(int i=0;i<(int)pre.size();i++){
            cout<<pre[i]<<" ";
        }
        cout<<endl;
        //2
        cout<<"prem:";
        for(int i=0;i<(int)prem.size();i++){
            cout<<prem[i]<<" ";
        }
        cout<<endl;
        //3
        cout<<"post:";
        for(int i=0;i<(int)post.size();i++){
            cout<<post[i]<<" ";
        }
        cout<<endl;
        //4
        cout<<"postm:";
        for(int i=0;i<(int)postm.size();i++){
            cout<<postm[i]<<" ";
        }
        cout<<endl;

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std;
struct node{
    int data;
    node *left,*right;
};
void insert(node* &root,int data);
void preorder(node* root,vector<int>&vi);
void preorderm(node* root,vector<int>&vi);
void postorder(node* root,vector<int>&vi);
void postorderm(node* root,vector<int>&vi);
int main(){ 
    int n,dt;
    while(cin>>n){
        node *root = NULL;
        vector<int> origin,pre,post,prem,postm;
        for(int i=0;i<n;i++){
            cin>>dt;
            origin.push_back(dt);
            insert(root,dt);
        }
        preorder(root,pre);
        preorderm(root,prem);
        postorder(root,post);
        postorderm(root,postm);
        if(origin==pre){
            cout<<"YES"<<endl;
            for(int i=0;i<(int)post.size();i++){
                cout<<post[i]<<" ";
            }
            cout<<endl;
        }else if(origin==prem){
            cout<<"YES"<<endl;
            for(int i=0;i<(int)postm.size();i++){
                cout<<postm[i]<<" ";
            }
            cout<<endl;
        }else{
            cout<<"NO"<<endl;
        }
    }   
    return 0;
}

void insert(node* &root,int data){
    if(root==NULL){
        root = new node;
        root->data = data;
        root->left=root->right=NULL;
        return;
    }
    if(data<root->data){
        insert(root->left,data);
    }else{
        insert(root->right,data);
    }
}

void preorder(node* root,vector<int>&vi){//先序遍历,结果存在vi
    if(root==NULL){
        return;
    }
    vi.push_back(root->data);
    preorder(root->left,vi);
    preorder(root->right,vi);
}

void preorderm(node* root,vector<int>&vi){//镜像先序遍历,结果存在vi
    if(root==NULL){
        return;
    }
    vi.push_back(root->data);
    preorderm(root->right,vi);
    preorderm(root->left,vi);
}

void postorder(node* root,vector<int>&vi){//后序遍历,结果存在vi
    if(root==NULL){
        return;
    }
    postorder(root->left,vi);
    postorder(root->right,vi);
    vi.push_back(root->data);
}

void postorderm(node* root,vector<int>&vi){//镜像后序遍历,结果存在vi
    if(root==NULL){
        return;
    } 
    postorderm(root->right,vi);
    postorderm(root->left,vi);
    vi.push_back(root->data);
}

 

树算法专题(四)二叉查找树

标签:图片   space   pac   测试   stream   ret   cst   删除   int   

原文地址:https://www.cnblogs.com/bijian/p/12509275.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!