c语言二叉树的递归建立

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct node{
    TYPE data;
    struct node *leff;
    struct node *right;
}Node,*pNode;

typedef char TYPE;
typedef struct node{
    TYPE data;
    struct node *leff;
    struct node *right;
}Node,*pNode;

void createTree(pNode &root){
    char l;
    char r;
    TYPE data;
    root = (pNode)malloc(sizeof(Node));
    memset(root,0,sizeof(Node));
    printf("Input root data:\n");
    scanf("%c",&data);
    getchar();
    if(data==‘#‘){
        root = NULL;
        return ;
    }
    else{
        root->data = data;
        createTree(root->leff);
        createTree(root->right);
    }
}

这种建立的方法最烦人的地方莫过于判断结束的时候输入‘#‘的个数了,并且要按照先序的方法输入。
时间: 2024-12-22 22:03:02

c语言二叉树的递归建立的相关文章

数据结构之二叉树的递归建立和遍历(续)

特此说明:上篇文章和这篇文章中的二叉树是链式二叉树的,不是顺序二叉树. 1.基本概述 A.层次遍历 摘自:http://blog.sina.com.cn/s/blog_5207b6c401009fq0.html 要采用的数据结构是队列.具体描述如下: 层次遍历:从上到下.从左到右依次访问结点.每次访问结点,就将该节点记录下来:若记录的所有结点都已经处理完毕,则结束遍历,否则重复下面的重装: 取出记录中第一个还没有访问的树的结点,若他有左子树,则访问左子树,并将其记录下来,否则,访问其右子树,并记

数据结构之二叉树的递归建立和遍历

1.二叉树概念 这里,得先明白树的概念 摘自:维基百科 在计算机科学中,树(英语:tree)是一种抽象资料型别(ADT)或是实作这种抽象资料型别的数据结构,用来模拟具树状结构性质的资料集合.它是由n(n>=1)个有限节点组成一个具有层次关系的集合.把它叫做"树"是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的.它具有以下的特点: 每个节点有零个或多个子节点: 没有父节点的节点称为根节点: 每一个非根节点有且只有一个父节点: 除了根节点外,每个子节点可以分为多个不相交的

递归建立二叉树

转载:递归建立二叉树 假设二叉树为: a b                 c d                 e 因为程序中要知道叶子结点(终点),所以要将上面的二叉树变成扩展二叉树 (把叶子结点的孩子补成#, 用作标记),  扩展后就变成了: a b                    c #        d          #       e #    #             #    # 那么,在输入的时候,需要输入: ab#d##C#e##      (注意,输入后,按

二叉树的非递归建立

1. 问题描述: 先序非递归建立一颗以二叉链表为存储结构的二叉树.例如建立如下所示的一颗二叉树 A /        \ B             E /      \        / C        D   F 则输入应为: ABC_ _D_ _EF_ _ _      (其中_代表空格). /* * 名 称: 建立二叉树(非递归) * 作 者: Brooke gao * 时 间: 2013/8/21 * */ #include<stdio.h> #include<stdlib.

二叉树的递归遍历 Tree UVa548

题意:给一棵点带权的二叉树的中序和后序遍历,找一个叶子使得他到根的路径上的权值的和最小,如果多解,那该叶子本身的权值应该最小 解题思路:1.用getline()输入整行字符,然后用stringstream获得字符串中的数字 2.用数组in_oder[]和post_order[]分别表示中序遍历和后序遍历的顺序,用数组rch[]和lch[]分别表示结点的左子树和右子树 3.用递归的办法根据遍历的结果还原二叉树(后序遍历的最后一个树表示的是根节点,中序遍历的中间一个表示根节点) 4.二叉树构造完成后

二叉树,递归非递归遍历算法(全)

包含了所有的非递归和递归的算法: #include<iostream> #include<queue> #include<stack> using namespace std; //二叉树结点的描述 typedef struct BiTNode { char data; struct BiTNode *lchild, *rchild; //左右孩子 }BiTNode,*BiTree; //按先序遍历创建二叉树 //BiTree *CreateBiTree() //返回结

二叉树的前序建立,前中后序遍历的非递归算法

二叉树的前序建立递归算法以及前中后序遍历的递归算法已经是人尽皆知了,递归算法也确实为代码的编写带来了很大的方便.然而,有时我们也确实需要它们的非递归算法.将递归算法转化为非递归算法可以帮助我们深入了解函数的调用与栈的原理.这里总结一下二叉树的这些重要的非递归算法. 一.前序建树 前序建树的基本思路是,接收用户输入的一组字符串,其中'#'代表空树,其他代表树结点的数据域值.例如,要建立如下一棵树 需要输入"AB#D##C##". 而非递归的思路是,1.设一个标志位来判断当前创建的结点是左

数据结构二叉树的递归与非递归遍历之 实现可编译(1)java

前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序遍历为例进行说明,中序遍历和后序遍历,以此类推! 二叉树递归与非递归遍历的区别,虽然递归遍历,跟容易读懂,代码量少,运算快,但是却容易出现溢出的问题,所以所以非递归遍历,在处理千万级的运算量时会先的很有用处. 二叉树的先序遍历:先访问根节点,再访问先后访问左右节点.如图: 二叉树的递归遍历之java

二叉树(15)----由中序遍历和后序遍历重建二叉树,递归方式

1.二叉树定义 typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.由中序遍历和后序遍历重建二叉树 中序遍历中,根节点总是位于左右子树