博客
关于我
求二叉树的深度
阅读量:342 次
发布时间: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/

    你可能感兴趣的文章
    使用DatagramSocket发送、接收数据(Socket之UDP套接字)
    查看>>
    android用视频当做背景
    查看>>
    Android6.0权限之超级无敌坑
    查看>>
    android 用action拦截打电话界面
    查看>>
    Android设置某个窗口常亮和最大亮度
    查看>>
    【已解决】Android Studio下,gradle project sync failed 错误
    查看>>
    打包命名
    查看>>
    Android SDK 与API版本对应关系
    查看>>
    实现谣传QQ中的手段——“1像素页面保活”
    查看>>
    Android UI效果篇-(3)用属性动画实现收缩菜单
    查看>>
    android中getLocationInWindow 和 getLocationOnScreen的区别
    查看>>
    Android反编译-揭秘猎豹设置默认浏览器逻辑
    查看>>
    Android onSaveInstanceState()和onRestoreInstanceState()调用时机
    查看>>
    错误: 编码GBK的不可映射字符
    查看>>
    安卓UI相关开源项目库汇总
    查看>>
    python3 读写Excel
    查看>>
    linux文件的权限 –rwxr-xr-x是什么意思,怎样变更文件夹以及下面所有文件的拥有者。
    查看>>
    html img点击跳转网页
    查看>>
    Python-Url编码和解码
    查看>>
    (十)Flutter 路由 push pop 与List 中溅墨(我咋觉得应该叫水波纹)效果(InkWell)
    查看>>