博客作业04--树

1.学习总结

1.1树结构思维导图

1.2 树结构学习体会

树的操作普遍用到了递归,自己在这方面上有点薄弱,所以得理解比较久。如果不用上递归也是要借助
栈,队列等工具。这一块得内容比较多,得多花时间。特别是树得基本内容,各种结点,创建树等都要掌握
好。基础弄懂才能比较好的运用,现在做起题目还是比较吃力,还是得继续努力。

2.PTA实验作业

题目1

1.1 :6-2 求二叉树高度

1.2 设计思路

如果树为空 return 0;
递归遍历左右子树;
比较两边的高度,返回值比较大的一个

1.3 代码截图

1.4 PTA提交列表说明。

本题没有碰到问题。

题目2

2.1:6-4 jmu-ds-表达式树

2.2 设计思路

创立两个栈一个放树,一个放操作符
for i=0 to str[i]
  如果str[i]不是操作符
     建立一个结点
      把它入栈
  如果它是操作符
     while(栈顶的操作符比碰到的操作符优先级大)
{
   分别取出树栈中两个元素作为左右孩子
   创立新的树
   再入栈该树}
    while(栈顶的操作符比碰到的操作符优先级一样)
{
   把操作符栈出栈一个
   continue}
 while(操作符栈不为空)
{   
    分别取出树栈中两个元素作为左右孩子
   创立新的树
   再入栈该树}

2.3 代码截图

2.4 PTA提交列表说明。


开始时对于进栈和出栈的操作有问题,询问同学后进行了改正。

题目3

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

3.2 设计思路

层次遍历:
定义一个环形队列
如果树并不为空就把它入对
while(队列不为空)
{
   取出队列的第一个元素
   输出该结点对应的值
   如果(该结点对应左子树不为空)
     就把该左子树入队
   如果(该结点对应右子树不为空)
     就把该右子树入队
}

3.3 代码截图

3.4 PTA提交列表说明。


答案错误:设置的测试点未删除,导致输出有问题。
部分正确:在建树上面出了点问题---求字符长度判断未减一;后进行了改正。

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

3.1 PTA排名

3.2 我的得分:180

4. 阅读代码

void levelOrderTraverse(const BiTree& T)  
{  
    queue<BiTree> q;  
    BiTree p = NULL;  
      
    if(T)//若根结点非空,则入队列   
    {  
        q.push(T);  
    }  
    while(!q.empty())//队列非空   
    {  
        p = q.front();  
        q.pop();  
        cout<<p->data<<" ";  
        if(p->lchild)//左孩子不空,入队列   
        {  
            q.push(p->lchild);  
        }  
        if(p->rchild)//右孩子不空,入队列   
        {  
            q.push(p->rchild);  
        }  
    }   
}  

该代码是实现层次遍历的功能,自己的做法是用书里建立环形队列的方法
该代码用的是普通队列,直接看的话还是该代码比较简洁,而且更易理解。

5. 代码Git提交记录截图

posted @ 2018-05-05 19:52  圣多美  阅读(209)  评论(1编辑  收藏  举报