二叉排序树的创建删除中序输出

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
typedef struct Node{
    Node *l, *r;
    int v;
    Node(){l = NULL; r = NULL;}
}*tree, Node;
tree build(tree p, int v){
    if(p == NULL){
        p = new Node();
        p->v = v;
        return p;
    }
    if(v < p->v)
        p->l = build(p->l, v);
    else if(v > p->v)
        p->r = build(p->r, v);
    else
        return p;
    return p;
}
void Delete(tree &T, int k){
    Node *p = T;
    Node *q, *s, *f;
    f = NULL;
    while(p){
        if(p->v == k){
            break;
        }
        f = p;
        if(k < p->v){
            p = p->l;
        }
        else{
            p = p->r;
        }
    }
    q = p;
    if(!p)return;
    if(p->l && p->r){
        p = p->l;
        while(p->r){
            s = p;
            p = p->r;
        }
        q->v = p->v;
        s->r = p->l;
        delete(p);
        return;
    }
    else if(p->l){
        q = p; p = p->l;
    }
    else{
        q = p; p = p->r;
    }
    //cout << "*" << endl;
    if(!f)T = p;
    else if(q == f->l)f->l = p;
    else f->r = p;
    delete(q);
}

void InOrder(tree p){
    if(p == NULL)return;
    InOrder(p->l);
    printf("%d ", p->v);
    InOrder(p->r);
}

int main(){
    int N;
    while(~scanf("%d", &N)){
        tree p;
        p = NULL;
        int v;
        for(int i = 0; i < N; i++){
            scanf("%d", &v);
            p = build(p, v);
        }
        InOrder(p);

        int m;
        scanf("%d", &m);
        for(int i = 0; i < m; i++){
            scanf("%d", &v);
            Delete(p, v);
            InOrder(p);
        }
    }
    return 0;
}

http://blog.csdn.net/zitong_ccnu/article/details/11097663#

时间: 2024-08-03 04:20:59

二叉排序树的创建删除中序输出的相关文章

二叉树的建立与先序,后序,中序输出

如果二叉树为: a b                                 c d                                 e 由于程序中要知道叶子结点(终点).所以要讲上面的二叉树变成扩展二叉树(把叶子结点的孩子补成#,用作标记),扩展后就变成了: a b                                 c #                  d              #                e #             #

PTA 中序输出叶子结点

6-8 中序输出叶子结点 (10 分) 本题要求实现一个函数,按照中序遍历的顺序输出给定二叉树的叶结点. 函数接口定义: void InorderPrintLeaves( BiTree T); T是二叉树树根指针,InorderPrintLeaves按照中序遍历的顺序输出给定二叉树T的叶结点,格式为一个空格跟着一个字符. 其中BiTree结构定义如下: typedef struct BiTNode { ElemType data; struct BiTNode *lchild,*rchild;

线索二叉树实例(前序创建,中序遍历)--2018.5.15

#include <stdio.h> #include <stdlib.h> #define ERROR 0 #define OK 1 typedef enum{Link, Thread} PointerTag; //link = 0表示指向左右孩子指针 //Thread = 1表示指向前驱或后继的线索 typedef struct BitNode { char data; //结点数据 struct BitNode *lchild; //左右孩子指针 struct BitNode

二叉树的广义表创建及中序遍历、后序遍历、层次遍历的非递归算法(C语言)

广义表创建二叉树关于用广义表的形式表示二叉树的形式如下 ①广义表中的一个字母代表一个结点的数据信息.②每个根结点作为由子树构成的表的名字放在义表的前面.③每个结点的左子树与右子树之间用逗号分开.若结点只有右子树面无左子树,则该逗号不能省略.④在整个广义表的末尾加一个特殊符号(如“@”)作为结束标志. 下面先用自然语言描述算法如下.依次从广义表中取得-个元素,并对取得的元素做如下相应的处理. ①若当前取得的元素为字母,则按如下规则建立一个新的(链)结点.a)若该结点为二叉树的根结点,则将该结点的地

二叉排序树,二叉树的中序,先序,后序遍历

public class BinaryTree { public static void main(String[] args) { int[] data = new int[10]; for(int i = 0; i < data.length; i++) { data[i] = (int)(Math.random() * 100) + 1; System.out.print(data[i] + " "); } System.out.println(); Node root =

二叉排序树的创建,遍历和删除

Binary Sort/Search Tree 为什么会有它 数组 未排序:直接在队尾添加,速度快:查找速度慢. 排序:二分查找,查找速度快:添加新数据,需要找到插入位置移动后面的数组,速度慢 链表 添加快,查找慢: 简介 BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大. 特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点 比如针对前面的数据 (7,3, 10, 12,

二叉排序树(三序输出)

二叉排序树 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6039 解决:2538 题目描述: 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历. 输入: 输入第一行包括一个整数n(1<=n<=100).     接下来的一行包括n个整数. 输出: 可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序.中序和后序遍历.     每种遍历结果输出一行.每行最后一个数据之后有一个空格. 样例输入: 5 1 6 5 9 8 样例输出: 1

先序中序后序遍历

前序遍历,也叫先根遍历,遍历的顺序是,根,左子树,右子树 遍历结果:ABDECF 中序遍历,也叫中根遍历,顺序是 左子树,根,右子树 遍历结果:DBEAFC 后序遍历,也叫后根遍历,遍历顺序,左子树,右子树,根 遍历结果:DEBFCA 先序输出:A B D G H E C K F I J中序输出:G D H B E A K C I J F后序输出:G H D E B K J I F C A

二叉树的构建与输入,前序中序后序

1 package org.lyk.main; 2 3 import java.util.Scanner; 4 5 6 class Test<T> 7 { 8 public static <T> void print(T d) 9 { 10 System.out.println(d); 11 } 12 } 13 14 class Node<T extends Comparable<T> > 15 { 16 Node<T> left; 17 T d