博客作业04--树

Posted hoppp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了博客作业04--树相关的知识,希望对你有一定的参考价值。

1.学习总结(2分)

1.1树结构思维导图

使用思维导图将树结构的知识点串在一起。树中的每个知识点需细化到每个操作如何实现。

1.2 树结构学习体会

谈谈你对树结构认识,学习这个结构是否遇到哪些困难及树结构可以解决的问题。

认识:树是非线性的数据结构,每一个节点都只有一个前驱(根节点除外),但是可以有零个或多个后继。这些数据节点按分支关系组织起来,清晰地反映了数据元素之间的层次关系,数据元素之间存在的关系是一对多的关系。
困难:之前都是用非递归的方法创建树,没用过递归的方法创建过树,所以不会用。哈夫曼树该如何用代码实现建立还不是很懂
可以解决的问题:朋友圈、亲戚关系

2.PTA实验作业(4分)

2.1 题目1:

6-4jmu-ds-表达式树

2.2 设计思路(伪代码或流程图)

        定义整型变量i=0,flag,字符型变量ch,f
        初始化运算符栈st,#为栈底符号
        初始化树栈BT
        while str[i]
            调用函数判断是否是运算符
            if 是运算符
                ch=栈顶元素
                调用函数比较一下优先级
                    栈顶符号的优先级高,栈顶符号出栈,将它作为一个节点创建树,并从栈BT中依次取出两个作为它的右孩子和左孩子,然后将这个节点放入栈BT
                    当前符号的优先级高,入栈st
                    优先级相等,栈顶元素出栈
            否则
                将它作为一个节点建树,左右子树都为空,然后将它放入栈BT中
        end while
        while 运算符栈st不为空
            ch=栈顶元素
            if ch为#,结束循环
            否则
                将它作为一个节点创建树,并从栈BT中依次取出两个作为它的右孩子和左孩子,然后将这个节点放入栈BT
        end while

2.3 代码截图




2.4 PTA提交列表说明。


树建立起来了,但是不知道怎么求值,参考了同学和书上的代码,做出来了。

2.1 题目2:

7-8 jmu-ds-二叉树叶子结点带权路径长度和

2.2 设计思路(伪代码或流程图)

        定义全局变量wpl=0
        if 根节点T为空
        return 0
        if 根节点的左孩子跟右孩子都为空
            wpl=wpl+根节点的值*深度depth
        否则
            访问左子树
                    WPL (T->lchild,depth+1)
            访问右子树
                    WPL (T->rchild,depth+1)

2.3 代码截图

2.4 PTA提交列表说明。


建树的方法有点小问题,刚开始不知道,后面用找叶子结点的方法知道了自己建树出了错,改了之后就通过了

2.1 题目3:

7-3 jmu-ds-二叉树层次遍历

2.2 设计思路(伪代码或流程图)

        定义BTree类型的变量p和队列qu
        根节点入队列
        while 队列不为空
            p=队列里的队头元素
            输出这个元素的值
            if左孩子存在
                左孩子入队列
            if右孩子存在
                右孩子入队列
        end while

2.3 代码截图

2.4 PTA提交列表说明。


建树的时候,采用非递归的方法,少写了一次结束建树的条件:if(str[i]==\'\\0\') break;

3.截图本周题目集的PTA最后排名(3分)

本次题目集总分:285分
必做题共:230分

3.1 PTA排名


3.2 我的得分

230

4. 阅读代码(必做,1分)

        BTree CreateBTree(string str,int i)
        {
           int len;
           BTree bt;
           bt=new TNode;
           len=str.size();
           if(i>len-1 || i<=0) return NULL;
           if(str[i]==\'#\') return NULL;
           bt->data =str[i];
           bt->lchild =CreateBTree(str,2*i); 
           bt->rchild =CreateBTree(str,2*i+1); 	
           return bt;
        }

这是考试时,老师放出来的建立二叉树的代码
该段代码用递归的方式实现了二叉树的建立,短短几行的代码就能实现二叉树的建立,对比之前用非递归的方法,实在是好用太多了,非递归的写了一大串代码。
可惜自己并不会这种方法,也没写过,考试的时候就懵逼了。

5. 代码Git提交记录截图

以上是关于博客作业04--树的主要内容,如果未能解决你的问题,请参考以下文章

博客作业04--树

博客作业04--树

博客作业04--树

博客作业04--树

博客作业04--树

博客作业04--树