美文网首页
[数据结构]排序二叉树 解题报告

[数据结构]排序二叉树 解题报告

作者: vouv | 来源:发表于2017-03-26 14:29 被阅读0次

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 <stdio.h>
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<deep;i++)printf("%s",stab);
            printf("%d\n",node[now].value,now);
            list[tp++]=node[now].value;
        }
        
        if(node[now].rchild!=0&&node[node[now].rchild].vsd==0){
            mtbt(deep+1,node[now].rchild);
        }
        else {
            mtbt(deep-1,node[now].parent);
        }
    }
    
    
    
}

int main() {
    int x;
    for(int i=0;i<1000;i++){
        node[i].value=0;
        node[i].lchild=0;
        node[i].rchild=0;
        node[i].parent=0;
        node[i].vsd=0;
    }
    while(1){
        scanf("%d",&x);
        if(x==0)break;
        insert(x,1);
    }
    
    mtbt(0,1);
    printf("\n");
    for(int i=0;i<tp;i++){
        printf(" %d",list[i]);
    }
    printf("\n");
    return 0;
}

相关文章

  • [数据结构]排序二叉树 解题报告

    Problem Description 建立并中序遍历一个排序二叉树 排序二叉树是指左子树的所有节点的值均小于它根...

  • [数据结构]快速排序 解题报告

    Problem Description 要求根据给定输入,按照课堂给定的快速排序算法进行排序,输出排序结果和med...

  • [数据结构]堆排序 解题报告

    Problem Description 实验要求:用堆排序算法按关键字递减的顺序排序。程序输入:待排序记录数(整数...

  • 数据结构

    数据结构 数据结构概念 顺序表 链表 队列 栈 二叉树 常用排序算法

  • java堆排序

    什么是堆排序:图解堆排序堆排序:利用了堆这种数据结构堆数据结构:特殊的完全二叉树,因为具有以下的特点:1)每个结点...

  • 解题报告 - 搜索旋转排序数组

    解题报告 - 搜索旋转排序数组 LeetCode 搜索旋转排序数组 @TOC[%E6%96%87%E7%AB...

  • 数据结构

    数组 数组是数据结构的基础,描述了物理排序地址 栈 队列 链表 二叉树

  • [数据结构]平衡二叉树 解题报告

    Problem Description 程序输入一个字符串(只包含小写字母),请按照字符的输入顺序建立平衡二叉排序...

  • iOS中级开发面试的重点

    Runloopruntime锁多线程优化block 算法: 排序, 查找数据结构: 链表, 二叉树矩阵哈希怎么解决...

  • 排序算法

    之前一篇练习数据结构中的二叉树-BinaryTree,本篇来点——排序算法,调调味,都是基本的排序算法中。 1. ...

网友评论

      本文标题:[数据结构]排序二叉树 解题报告

      本文链接:https://www.haomeiwen.com/subject/xyckottx.html