随笔 - 81  文章 - 0  评论 - 0  阅读 - 7175 

一、基本操作

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);
}
复制代码

 

posted on   晨曦生辉耀匕尖  阅读(157)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
点击右上角即可分享
微信分享提示