zoukankan      html  css  js  c++  java
  • 二叉树的基本操作

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <stack>

    using namespace std;

    /*****************************************************************
    *Module Name: 简单二叉树1
    *Module Date: 2018.12.11
    *Module Auth: 谭路
    *Description: 二叉树的生成,结点的遍历,结点的删除操作
    *Others: null
    *evision History: null
    *DateRel VerNotes: null
    *XX/XX/XXXXX.X: null
    *****************************************************************/

    typedef char ElemType;

    typedef struct BitNode{
    ElemType date;
    struct BitNode* lchild, rchild;
    }BitNode, *BiTree;

    //前序遍历创建二叉树
    BiTree CreateTree(BiTree t){
    ElemType ch;
    scanf("%d", &ch);

    if('#' == ch){
    t == NULL;
    }
    else {
    t = (BiTree*) malloc(sizeof(BitNode));
    if(NULL == t){
    fprintf(stderr, "malloc error in CreateTree. ");
    }
    else {
    t->date = ch;
    t->lchild = CreateTree(t->lchild);
    t->rchild = CreateTree(t->rchild);
    }
    }
    return t;
    }

    //先序遍历
    void PreOrderTraverse(BiTree t){
    if(NULL != t){
    printf("%c", t->date);
    PreOrderTraverse(t->lchild);
    PreOrderTraverse(t->rchild);
    }
    }

    //后序遍历非递归实现,可以将栈改为自己编写的数据结构
    bool NoPostOrderTraverse(BiTree t){
    stack<BiTree> s;
    if(!s.empty()){
    while(!s.top()){
    s.pop();
    }
    }

    BiTree cur; //当前结点
    BiTree pre = NULL; //前一次访问的结点
    BiTree tmp; //临时结点

    if(NULL == t){
    fprintf(stderr, "the tree is null. ");
    return false;
    }

    s.push(t);
    while(!s.empty()){
    cur = s.top();
    if((cur->lchild == NULL && cur->rchild == NULL) ||
    (pre != NULL && (pre == cur->lchild || pre == cur->rchild)))
    {
    printf("%c", cur->date);
    s.pop();
    pre = cur;
    }
    else {
    if(cur->rchild != NULL){
    s.push(cur->rchild);
    }
    if(cur->lchild != NULL){
    s.push(cur->lchild);
    }
    }
    }
    return true;
    }

    //前序遍历查找需要的数据
    boolean PreOrderTraverse(BiTree t, ElemType date, BitNode *p){
    if(NUll == t){
    if(t->date == date){
    p = t;
    return true;
    }
    else {
    PreOrderTraverse(t->lchild, date, p);
    PreOrderTraverse(t->rchild, date, p);
    }

    }
    }

    // 2018-12-12

  • 相关阅读:
    vue报错 Do not use built-in or reserved HTML elements as component id:header
    vue 报错./lib/html5-entities.js this relative module was not
    vue报错/ style-loader: Adds some css to the DOM by adding a <style> tag
    vue报错 Module not found: Error: Cannot resolve 'file' or 'directory'
    vue报错 vue-cli 引入 stylus 失败
    oracle 定时任务
    Java 基础面试题
    在Java中调用带参数的存储过程
    Linux安装JDK完整步骤
    Spring中获取数据库表主键序列
  • 原文地址:https://www.cnblogs.com/854594834-YT/p/10106191.html
Copyright © 2011-2022 走看看