精华内容
下载资源
问答
  • 先序建立二叉树

    2021-05-06 13:36:02
    先序建立二叉树时,要把空节点补上,像满二叉树一样。特别是叶子节点的左右孩子节点为空的情况也要表示出来 status creat(Tree& T) { char a; scanf_s("%c", &a); if (a == '#')//#为空节点 { T = ...

    在先序建立二叉树时,要把空节点补上,像满二叉树一样。特别是叶子节点的左右孩子节点为空的情况也要表示出来

    status creat(Tree& T)
    {
        char a;
        scanf_s("%c", &a);
        if (a == '#')//#为空节点
        {
            T = NULL;
            return ok;
        }
    
        else
        {
            T = (treenode*)malloc(sizeof(treenode));
            if (!T)
                return OVERFLOW;
            T->data = a;
            creat(T->left);
            creat(T->right);
        }
        return ok;
    }
    
    展开全文
  • 采用二叉链表存储先序建立二叉树,非递归中序遍历二叉树算法实现
  • 先序建立二叉树中查找孩子返回双亲那快函数怎么执行都是显示找不到双亲。大佬帮看看是我哪写错了呗。以下是完整代码: #include #include #include using namespace std; typedef char DataType; typedef ...
  • 先序建立二叉树,输出中序遍历,并求其深度。中序用非递归实现。
  • 二叉树先序建立

    一、二叉树 (Binary Tree)

    定义: 二叉树是n个节点的有限集合,该集合或者为空集( 称为空二叉树 ),或者由一个根节点和两棵互不相交的的二叉树组成,这两棵二叉树分别称为根节点的左子树和右子树。


    本次二叉树知识体系的总结秉承的思想是:我们希望 二叉树类BiTree,它的私有成员能体现二叉树本身的性质,它的公有成员能提供给用户一系列对二叉树的操作方法。


    二、先序创建二叉树

    BiTree.h 头文件定义如下:

    typedef char Item;          //树中数据类型
    typedef struct node         //每个节点包含一个数据,一个左指针,一个右指针
    {
        Item data;              //节点中数据
        struct node *lchild;    //指向当前节点的左孩子
        struct node *rchild;    //指向当前节点的右孩子
    }BiTNode;
    
    class BiTree
    {
    private:
        BiTNode *root;                      //二叉树的根节点
        int size;                           //二叉树的大小
        int depth;                          //二叉树的深度
    public:
        BiTree();                           //初始化二叉树构造函数
        void GetBiTRoot();                  //获取根节点
        void GetBiTNum();                   //获取二叉树节点数目
        void GetBiTDepth();                 //获取二叉树的深度
    
        BiTNode* CreateBiTree();            //先序创建二叉树
    };
    

    BiTree.cpp 文件定义如下:

    #include "BiTree.h"
    #include <iostream>
    #include <queue>
    using namespace std;
    static int leftdepth = 0;                   //左深度计数器
    static int rightdepth = 0;                  //右深度计数器
    //函数原型
    
    //构造函数
    //初始化二叉树,根节点指向空,树大小为0,深度为0
    BiTree::BiTree()
    {
        root = nullptr;
        size = 0;
        depth = 0;
    }
    
    //操作:  获取二叉树根节点数据
    void BiTree::GetBiTRoot()
    {
        cout << "二叉树的根节点为:";
        cout << this->root->data << endl;
    }
    
    //操作:  获取二叉树节点数目
    void BiTree::GetBiTNum()
    {
        cout << "二叉树的节点数目为:";
        cout << this->size << endl;
    }
    
    //操作:  获取二叉树的深度
    void BiTree::GetBiTDepth()
    {
        cout << "二叉树的深度为:";
        cout << this->depth << endl;
    }
    //操作:  先序建立二叉树
    //操作前:无参数,输入#表示为空
    //操作后:创建完整的树并返回树的根节点
    BiTNode* BiTree::CreateBiTree()
    {
        BiTNode *ptree;         //指向当前树节点的指针        
        if (this->root == nullptr)
            cout << "请输入根节点(#代表空树):";
        else
            cout << "请输入节点(#代表空树):";
        Item TreeData;          //树中的数据
        cin >> TreeData;        //输入数据
        if (TreeData == '#')    //如果输入的是“#”则表示空
            ptree = nullptr;
        else                    //否则不为空,申请一个空
        {
            if (!(ptree = new BiTNode))
                exit(1);
            ptree->data = TreeData;
            if(this->root == nullptr)
                this->root = ptree;
            this->size++;       //节点个数+1
            cout << ptree->data << "的左孩子";
            if(ptree->lchild = CreateBiTree())
                leftdepth++;    //左深度+1
            cout << ptree->data << "的右孩子";
            if(ptree->rchild = CreateBiTree())
                rightdepth++;   //右深度+1
        }
        this->depth = (leftdepth > rightdepth ? leftdepth : rightdepth) + 1;
        return ptree;           //最终返回树的根节点
    }
    

    UseBiTree.cpp 文件定义如下:

    #include "BiTree.h"
    #include <iostream>
    using namespace std;
    int main()
    {
        BiTree tree;
        tree.CreateBiTree();    //先序建立二叉树
        tree.GetBiTRoot();      //获取二叉树的根节点数据
        tree.GetBiTNum();       //获取二叉树的总节点个数
        tree.GetBiTDepth();     //获取二叉树的深度
    
        system("pause");
        return EXIT_SUCCESS;
    }

    三、运行结果

    输入二叉树如下图所示

    二叉树
    运行结果

    运行结果


    下一篇文章将为大家介绍《二叉树的遍历》

    如有不对的地方欢迎大家指正交流

    展开全文
  • 先序构造链式存储二叉树算法: Status CreateBiTree(BiTree &T){ scanf(&ch); if(ch==‘ ’) T=NULL;//与下面的if判断共同构成递归出口 else{ if(!T=(BiTNode *)malloc(sizeof(BiTNod

    树结点的结构定义:

    typedef struct BiTNode{
    	TElemType data;
    	struct BiTNode *lchild,*rchild;
    }BiTNode,*BiTree;
    

    先序构造链式存储二叉树算法:

    Status CreateBiTree(BiTree &T){
    	scanf(&ch);
    	if(ch==‘ ’) T=NULL;//与下面的if判断共同构成递归出口
    	else{
    		if(!T=(BiTNode *)malloc(sizeof(BiTNode)))
    			exit(OVERFLOW);//内存不够时退出
    		T-> data=ch; //将所输入字符赋值给当前结点
    		CreatBiTree(T->lchild);
    		CreatBiTree(T->rchild);
    	}
    	return OK;
    }
    

    参考:严版数据结构教材131页算法6.3

    ps:和网上各种其他版本的构造方法相比,可以看出这的确是一种简洁优雅的构造方式。

    展开全文
  • 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再...

    题目描述

    编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

    输入描述:

    输入包括1行字符串,长度不超过100。

    输出描述:

    可能有多组测试数据,对于每组数据,
    输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。
    每个输出结果占一行。

    输入

     

    abc##de#g##f###
    

    输出

     

    c b e g d f a 
    
    #include<bits/stdc++.h>
    using namespace std;
    
    //二叉树的存储结构
    typedef struct Bnode
    {
        char data;
        struct Bnode *lchild,*rchild;
    } Bnode,*Btree;
    
    //先序创建二叉树,#为空的节点
    Btree PreCreateTree()
    {
        Btree T;
        char s;
        scanf("%c",&s);
        if(s=='#')
        {
            T=NULL;
        }
        else
        {
            T=(Btree)malloc(sizeof(Bnode));
            T->data = s;
            T->lchild = PreCreateTree();
            T->rchild = PreCreateTree();
        }
        return T;
    }
    
    //中序遍历
    void In_Order(Btree T)
    {
        if(T==NULL)
            return ;
        In_Order(T->lchild);
        cout<<T->data<<" ";
        In_Order(T->rchild);
    }
    
    int main()
    {
        Btree T = PreCreateTree();
        In_Order(T);
        return 0;
    }
    

     

    展开全文
  • 二叉树之先序建立二叉树

    千次阅读 2014-04-05 21:12:49
    以下代码是我参考网上先序建立二叉树的定义,建立的二叉树,并再先序遍历每个节点 //------------------------------------------------------------- //********先序建立二叉树,并再先序遍历二叉树***********...
  • 题目描述 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是...输出将输入字符串建立二叉树后中序遍...
  • 注意先序建立时调用的是结点指针的地址 #include<iostream> using namespace std; typedef struct bitnode { char data; struct bitnode* lchild, * rchild; }bitnode,*bitree;//定义结点 int i;//全局...
  • #include<stdio.h> #include<stdlib.h> #define OK 1 #define OVERFLOW -2 #define ERROR 0 typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;......
  • /* * BinTree.h */#define TRUE 1#define False 0#define OK 1#define ERROR... //Status是函数的类型,其值是函数结果状态代码/* 定义二叉树结点类型 */typedef char ElemType;/* 定义二叉树的数据结构 */typedef st
  • 1、二叉树的数据结构:二叉链表 package BT; public class BinearyTree&lt;E&gt; {  E data;   BinearyTree&lt;E&gt; lchild;  BinearyTree&lt;E&gt; rchild;  public BinearyTree(E...
  • /*先序为DLR(D:根节点,L:左子树,R:右子树) a / \ b c / \ / \ ...//先序序列为abdce,输入为abd***c*e**(*表示空格,代表空树),输入按满二叉树输入 //每一个节点都是一个子树的根节点 ...
  • 先序二叉树//先序建立二叉树 void createBiTree(BiTree &amp;T){ int cnt; scanf("%d",&amp;cnt); if(cnt == -1){ T = NULL; return ; } T = (BiTNode *)malloc(sizeof(BiTNode)); T-&...
  • 先序序列建立二叉树并输出

    千次阅读 2014-11-19 00:44:04
    现存的很多关于先序建立二叉树的方法都有xi
  • 先序创建二叉树并遍历计算节点数 先序创建二叉树并遍历计算节点数
  • 以下是对先序遍历二叉树的递归实现与非递归实现进行了详细的分析介绍,需要的朋友可以过来参考下
  • 扩展先序创建二叉树
  • 先序输出二叉树节点

    2019-11-02 12:35:04
    #include "bitree.h" .../*先序遍历二叉树, root为指向二叉树根结点的指针*/ { if (root!=NULL) { printf("%c ",root ->data); /*输出结点*/ PreOrder(root ->LChild); /*先序遍历左子树*/ PreOrder...
  • 想要程序以及c++调试(不是执行),就是c++中组建中的调试start into。越详细越好
  • 先序线索二叉树

    2021-08-02 11:12:15
    只是在先序线索void PreThread(ThreadTree &p,ThreadTree &pre)要注意添加tag的判断,不然可能会出现死循环 if(p->ltag != 1)//@@@ 这里因为p->lchild可能是p的前驱结点,//如果不判断ltag,则会死...
  • 2344: 先序遍历二叉树 时间限制: 1 Sec 内存限制: 128 MB 提交: 4 解决: 3 题目描述 给定一颗二叉树,要求输出二叉树的深度以及先序遍历二叉树得到的序列。本题假设二叉树的结点数不超过1000。 输入 ...
  • 编写先序遍历二叉树的非递归算法程序,要求: (1)以二叉链表建立二叉树。 (2)输出遍历的结点序列。 (3)有实例验算。
  • 题目描述 编一个程序,读入用户...可能有多组测试数据,对于每组数据,输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。每个输出结果占一行。 样例输入 a#b#cdef##### a## 样例输出 a b f

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,841
精华内容 5,936
关键字:

先序建立二叉树