zoukankan      html  css  js  c++  java
  • 博客作业04--树

    1.学习总结

    1.1树结构思维导图

    1.2 树结构学习体会

    学习树这一章节大量地用到了递归算法,虽然是几行代码就解决的事情,但是在写之前要考虑清楚递归结束的标志是什么,每一步的递归需要做什么,这些都是需要认真仔细思考的。当熟悉之后树似乎也不是那么难,但是对于处理表达式树、线索树、哈夫曼树、并查集还存在困难。二叉树的主要应用在平衡二叉树,可以使查找、插入、删除的时间复杂度最坏为O(log n),大大提高了算法效率,还有哈夫曼树在编码一块的应用。

    2.PTA实验作业

    2.1.1 题目1:表达式树【未完成】

    2.1.2 设计思路

    2.1.3 代码截图

    2.1.4 PTA提交列表说明。

    2.2.1 题目2:还原二叉树

    2.2.2 设计思路

    1.还原二叉树函数

    if n<=0 return NULL;
    新建二叉树节点b,令b->data指向根节点
    for p=in to in+n
        if p等于根节点,停止循环
    k=p-in; //k为根节点在in中的位置
    递归造左子树
    递归造右子树
    

    2.求树的高度函数

    if 树为空 返回NULL
    else
        左子树高度=递归左子树
        右子树高度=递归右子树
        比较左右子树的高度,返回(更大的高度+1)
    

    2.2.3 代码截图

    2.2.4 PTA提交列表说明。

    还原二叉树的代码是课本上的,但是在调试的时候不知道为什么发生段错误,后来发现是对于字符数组的定义有点问题。

    2.3.1 题目3:二叉树叶子结点带权路径长度和

    2.3.2 设计思路

    • 计算叶子带权路径之和
    定义全局变量WPL表示带权路径之和,length表示当前叶节点的路径长度
    if b不为空
        if b的左右子树同时为空
            计算叶子节点b的带权路径长度,重置length为0
        length++
        递归左子树
        递归右子树
    

    2.3.3 代码截图

    2.3.4 PTA提交列表说明。

    经过调试发现右子树下的左右子树,在计算时第三个叶节点的路径不是从根节点开始计算,目前还没想到如何解决。

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

    3.1 PTA排名

    3.2 我的得分:145

    4. 阅读代码

    将二叉查找树转为有序的双链表

    static void tree2list_inorder(Node* root, Node*& prev, Node*& list_head)
    
    {
    
      if (root->left) tree2list_inorder(root->left, prev, list_head);
    
     
    
      root->left = prev;
    
      if (prev) prev->right = root;
    
      prev = root;
    
      if (list_head == NULL) list_head = root;
    
     
    
      if (root->right) tree2list_inorder(root->right, prev, list_head);
    
    }
    
     
    
    Node* tree2list(Node* root)
    
    {
    
      Node* list_head = NULL;
    
      Node* prev = NULL;
    
      if (root) tree2list_inorder(root, prev, list_head);
    
      return list_head;
    
    }
    

    当我看到这个标题时没有一点头绪不知道该怎么下手,该代码巧妙地利用中序遍历将二叉查找树转为有序双链表,中序遍历的特点让这个程序更加简洁。

    原地址:{https://www.cnblogs.com/justin20160409/p/5438145.html}

    5. 代码Git提交记录截图

  • 相关阅读:
    android 瀑布流的实现详解,附源码
    NodeJs新手学习笔记之工具准备
    android app的类响应式设计
    开源一个友盟 for android 操作的封装包
    谈谈多门程序语言的学习策略之一
    谈谈android 布局 的优化
    android 滑动指引页的设计
    彻底弄懂CSS盒子模式
    关于内容管理系统IWMS的几个问题
    数码相机常用英文缩写对照表
  • 原文地址:https://www.cnblogs.com/wwwwxy128/p/8995373.html
Copyright © 2011-2022 走看看