求二叉树的深度
发布日期:2021-05-07 17:58:51 浏览次数:9 分类:精选文章

本文共 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,使得代码更易于扩展和修改,适合长期维护和开发。
  • 上一篇:打印输出二叉树中叶子的结点
    下一篇:输出中序遍历的结点包括结点的标记域与数据域

    发表评论

    最新留言

    做的很好,不错不错
    [***.243.131.199]2025年04月01日 21时09分11秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章