[데이터 구조] 정렬 이 진 트 리 문제 풀이 보고서

2233 단어
Problem Description
정렬 이 진 트 리 를 만 들 고 중간 순서 로 옮 겨 다 니 기
정렬 이 진 트 리 란 왼쪽 서브 트 리 의 모든 노드 의 값 이 뿌리 노드 의 값 보다 작고 오른쪽 서브 트 리 의 모든 노드 의 값 이 뿌리 노드 의 값 보다 크다 는 것 을 말한다. 예 를 들 어 아래 그림 은 정렬 이 진 트 리 이다.
입력:
한 줄 을 입력 하면 정렬 할 수 를 표시 하고 0 을 입력 할 때 멈 춥 니 다.
출력
이 진 트 리 의 오목 표시 와 이 진 트 리 의 중간 순 서 를 반복 합 니 다.
테스트 입력
42 168 35 101 270 125 79 259 263 165 6 246 182 62 192 296 243 28 37 0 

테스트 출력
        6
            28
    35
        37
42
                62
            79
        101
            125
                165
    168
                    182
                        192
                            243
                246
            259
                263
        270
            296

 6 28 35 37 42 62 79 101 125 165 168 182 192 243 246 259 263 270 296

AcCode
//
//  main.cpp
//       
//
//  Created by jetviper on 2017/3/26.
//  Copyright © 2017  jetviper. All rights reserved.
//

#include 
struct{
    int value,parent,lchild,rchild,vsd;
}node[1000];
int k=2,tp=0,list[1000];
char stab[5] = "    ";

void insert(int x,int now){
    if(node[now].value==0){
        node[now].value=x;
        return;
    }
    
    if(x>node[now].value){
        
        if(node[now].rchild==0){
            node[now].rchild = k;
            node[k].value = x;
            node[k].parent = now;
            k++;
        }
        else {
            insert(x,node[now].rchild);
        }
        
    }
    else {
        
        if(node[now].lchild==0){
            node[now].lchild = k;
            node[k].value = x;
            
            node[k].parent = now;
            k++;
        }
        else {
            insert(x,node[now].lchild);
        }
    }
}
void mtbt(int deep,int now){
    if(node[now].value==0)return;
    
    
    if(node[now].lchild!=0&&node[node[now].lchild].vsd == 0) {
        mtbt(deep + 1, node[now].lchild);
    }
    else {
        if(node[now].vsd==0){
            node[now].vsd =1;
            for(int i=0;i

좋은 웹페이지 즐겨찾기