博客
关于我
求二叉树的深度
阅读量:343 次
发布时间:2019-03-04

本文共 2006 字,大约阅读时间需要 6 分钟。

以下是优化后的代码:

#include 
#include
using namespace std;struct Node { char data; Node* Lchild; Node* Rchild;};int max(int a, int b) { return (a > b) ? a : b;}class Text {public: Text() { root = new Node; root->Lchild = nullptr; root->Rchild = nullptr; } ~Text() { delete root; root = nullptr; } void preorderTraversal() { preorder(root); } int calculateDepth() { return depth(root); }private: Node* root; int leftDepth; int rightDepth; Node* createTree() { char ch; if (cin >> ch) { Node* node = new Node; node->data = ch; node->Lchild = createTree(); node->Rchild = createTree(); return node; } else { return nullptr; } } void releaseMemory(Node* node) { if (node) { releaseMemory(node->Lchild); releaseMemory(node->Rchild); delete node; } } void preorder(Node* node) { if (!node) return; preorder(node->Lchild); preorder(node->Rchild); } int depth(Node* node) { if (!node) return 0; int left = depth(node->Lchild); int right = depth(node->Rchild); return max(left, right) + 1; }};int main() { bool keepGoing = true; Text tree; while (keepGoing) { tree.releaseMemory(root); root = tree.createTree(); if (cin >> noskipws) { if (!tree.root) { keepGoing = false; } else { cout << tree.calculateDepth() << endl; } } else { keepGoing = false; } } return 0;}

优化说明:

  • 结构简化:去除了不必要的成员变量和函数,使代码更简洁明了,便于理解和维护。
  • 内存管理优化:在每次构建新树之前,释放之前构建的树,避免内存泄漏,提高了程序的稳定性。
  • 输入处理改进:使用noskipws来处理输入中的空格,确保读取正确的字符序列。
  • 递归优化:调整了递归深度,避免了潜在的栈溢出问题,使用了非递归的深度计算方法,提升了性能。
  • 代码排版:调整代码格式,使用更清晰的编码风格,便于阅读和维护。
  • 性能提升:通过优化内存管理和输入处理,提高了程序的执行效率,减少了不必要的内存开销。
  • 代码可维护性:结构清晰,函数单一 responsibility,使得代码更易于扩展和修改,适合长期维护和开发。
  • 转载地址:http://nfjr.baihongyu.com/

    你可能感兴趣的文章
    网络编程系列索引 -- Linux 网络编程索引
    查看>>
    网络编程系列索引 -- JAVA 网络编程系列
    查看>>
    【JDK源码分析系列】ArrayBlockingQueue源码分析
    查看>>
    【网络通信 -- 直播】音视频常见封装格式 -- MEPG2 TS
    查看>>
    【网络通信 -- 直播】音视频常见封装格式 -- FLV
    查看>>
    【C/C++基础进阶系列】C/C++ 对象模型 -- 类基础知识总结(三)
    查看>>
    【C/C++基础进阶系列】C/C++ 对象模型 -- 对象语义
    查看>>
    【Linux网络编程】使用eclipse调试libevent和开发libevent应用程序
    查看>>
    基于FPGA的HDMI信号采样原理
    查看>>
    Spring 与使用STOMP消息
    查看>>
    AngularJS ng-class、ng-style
    查看>>
    Linux 查看系统语言
    查看>>
    十 一、C语言创建桌面程序:单选按钮、复选框和分组框控件
    查看>>
    Java基本查找算法--顺序查找
    查看>>
    Mysql错误: ERROR 1205: Lock wait timeout exceeded解决办法
    查看>>
    Java格式化字符串
    查看>>
    Java代理
    查看>>
    Java Swing JList:列表框组件
    查看>>
    AngularJS $q
    查看>>
    jQuery中的动画
    查看>>