当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

排序二叉树

发表于: 2013-05-03   作者:chinrui   来源:转载   浏览次数:
摘要: #include <iostream> #include <stdlib.h> using namespace std; typedef int Elemtype; struct TNode { Elemtype data; struct TNode *lChild, *rChild; }; typedef struct Head {
#include <iostream>
#include <stdlib.h>

using namespace std;

typedef int Elemtype;
struct TNode {
    Elemtype data;
    struct TNode *lChild, *rChild;
};
typedef struct Head {
    TNode *root;
} *Tree;

//函数声明
Tree init();
TNode * initNode();
void displayDESC(TNode *);
void add(Tree , Elemtype);
void displayASC(TNode *);

int main()
{
    Tree tree = init();
    int iSize;
    Elemtype insertValue;
    cout << "请输入要插入结点数:" << endl;
    cin >> iSize;
    for(int i = 0; i < iSize; i++) {
        cin >> insertValue;
        add(tree , insertValue);
    }
    cout << "排序后的树为(从小到大):" << endl;
    displayDESC(tree->root);
    cout << endl;
    cout << "排序后的树为(从大到小):" << endl;
    displayASC(tree->root);
    return 0;
}

//初始化一棵树
Tree init() {
    Tree t = (Tree)malloc(sizeof(Head));
    t->root = NULL;
    return t;
}

//初始化一个树结点
TNode * initNode() {
    TNode *t = (TNode *)malloc(sizeof(TNode));
    t->lChild = NULL;
    t->rChild = NULL;
    return t;
}

//从小到大展示树中所有元素
void displayDESC(TNode *root) {
    if(root == NULL) {
        return;
    }
    displayDESC(root->lChild);
    cout << root->data << " ";
    displayDESC(root->rChild);
}

//从大到小展示树中所有元素
void displayASC(TNode *root) {
    if(root == NULL) {
        return;
    }
    displayASC(root->rChild);
    cout << root->data << " ";
    displayASC(root->lChild);
}

//向树中添加元素结点
void add(Tree tree , Elemtype value) {
    //如果没有指向根结点的指针,直接返回
    if(tree == NULL) {
        return;
    }

    //初始化要插入的数据为一个树结点
    TNode *t = initNode();
    t->data = value;

    //如果没有根结点,把要插入的结点当作根结点插入
    if(tree->root == NULL) {
        tree->root = t;
        return;
    }

    //将要插入的点与树中的各结点值进行比较,小的放左树,大的放右树
    TNode *tCurr = tree->root;

    while(tCurr != NULL) {
        if(t->data <= tCurr->data) {
            if(tCurr->lChild != NULL) {
                tCurr = tCurr->lChild;
                continue;
            } else {
                tCurr->lChild = t;
                break;
            }
        } else {
            if(tCurr->rChild != NULL) {
                tCurr = tCurr->rChild;
                continue;
            } else {
                tCurr->rChild = t;
                break;
            }
        }
    }
}

排序二叉树

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
注:我已对本文章进行了更新,深入谈讨了完全二叉树的实现原理,劳烦移步。 属性: ①若它的左子树
1.二叉树,一种递归的数据结构,一棵非空的二叉树由根节点以及左右子树组成。 且看图: 在任一给定
import java.util.*; public class SortedBinTree<T extends Comparable> { static class Nod
1. 排序二叉树 排序二叉树是在二叉树的限制基础上又加了一些限制,所有的的树节点数据都具有可比较
1. 排序二叉树 排序二叉树是在二叉树的限制基础上又加了一些限制,所有的的树节点数据都具有可比较
一.排序二叉树 排序二叉树是一种特殊结构的二叉树,可以非常方便地对树中所有节点进行排序和检索。
一、二叉树遍历 1、前序遍历(PreOrder)\中序遍历(InOrder)\后序遍历(PostOrder) void PreOrde
之前做了这五种树的实现,为了更形象的理解树的效果,特意写了绘制函数,得到下面几个图。 每个树做
对于大量的输入数据,链表的线性访问时间太慢,不宜使用。树是一种在实际编程中经常遇到的数据结构
10 排序
直接插入排序 排序过程 整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号