LintCode: Binary Tree Inorder Traversal

简介:

C++,递归,辅助函数

复制代码
 1 /**
 2  * Definition of TreeNode:
 3  * class TreeNode {
 4  * public:
 5  *     int val;
 6  *     TreeNode *left, *right;
 7  *     TreeNode(int val) {
 8  *         this->val = val;
 9  *         this->left = this->right = NULL;
10  *     }
11  * }
12  */
13 class Solution {
14     /**
15      * @param root: The root of binary tree.
16      * @return: Inorder in vector which contains node values.
17      */
18 public:
19     vector<int> inorderTraversal(TreeNode *root) {
20         // write your code here
21         vector<int> result;
22         if (root == NULL) {
23             return result;
24         } else {
25             inorderCore(root, result);
26         }
27         return result;
28     }
29     void inorderCore(TreeNode *root, vector<int> &result) {
30         if (root->left != NULL) {
31             inorderCore(root->left, result);
32         }
33         result.push_back(root->val);
34         if (root->right != NULL) {
35             inorderCore(root->right, result);
36         }
37     }
38 };
复制代码

C++,递归

复制代码
 1 /**
 2  * Definition of TreeNode:
 3  * class TreeNode {
 4  * public:
 5  *     int val;
 6  *     TreeNode *left, *right;
 7  *     TreeNode(int val) {
 8  *         this->val = val;
 9  *         this->left = this->right = NULL;
10  *     }
11  * }
12  */
13 class Solution {
14     /**
15      * @param root: The root of binary tree.
16      * @return: Inorder in vector which contains node values.
17      */
18 public:
19     vector<int> inorderTraversal(TreeNode *root) {
20         // write your code here
21         vector<int> result;
22         if (root == NULL) {
23             return result;
24         }
25         if (root->left != NULL) {
26             vector<int> left = inorderTraversal(root->left);
27             result.reserve(result.size() + left.size());
28             result.insert(result.end(), left.begin(), left.end());
29         }
30         result.push_back(root->val);
31         if (root->right != NULL) {
32             vector<int> right = inorderTraversal(root->right);
33             result.reserve(result.size() + right.size());
34             result.insert(result.end(), right.begin(), right.end());
35         }
36         return result;
37     }
38 };
复制代码

C++,非递归

复制代码
 1 /**
 2  * Definition of TreeNode:
 3  * class TreeNode {
 4  * public:
 5  *     int val;
 6  *     TreeNode *left, *right;
 7  *     TreeNode(int val) {
 8  *         this->val = val;
 9  *         this->left = this->right = NULL;
10  *     }
11  * }
12  */
13 class Solution {
14     /**
15      * @param root: The root of binary tree.
16      * @return: Inorder in vector which contains node values.
17      */
18 public:
19     vector<int> inorderTraversal(TreeNode *root) {
20         // write your code here
21         vector<int> result;
22         if (root == NULL) {
23             return result;
24         }
25         stack<TreeNode *> sta;
26         TreeNode *cur = root;
27         while (cur != NULL || !sta.empty()) {
28             while(cur != NULL) {
29                 sta.push(cur);
30                 cur = cur->left;
31             }
32             cur = sta.top();
33             sta.pop();
34             result.insert(result.end(), cur->val);
35             cur = cur->right;
36         }
37         return result;
38     }
39 };
复制代码

 


本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/p/4999036.html,如需转载请自行联系原作者

相关文章
|
2月前
|
人工智能 监控 数据可视化
什么是低代码开发平台?2025年最热门的10大低代码开发平台盘点!
低代码开发平台通过可视化拖拽、模型驱动等方式,大幅减少手工编码,提升应用开发效率。当下更是结合AI能力,自动生成应用,组件,图表,进一步加快应用软件的开发效率落地。
|
数据安全/隐私保护 Docker 容器
厉害了,如何搭建一套自己的私有网盘?
本文教大家用docker搭建一款自己的私有网盘,教程给大家分享一下。 开源云盘选择 搭建前我仔细看了一下各个开源私有云盘的实现,有以下几种:
592 0
厉害了,如何搭建一套自己的私有网盘?
|
3月前
|
机器学习/深度学习 算法 BI
汽车雷达系统的干扰缓解:现状调查与未来趋势——论文阅读
本文系统综述了汽车雷达干扰缓解技术的最新进展,提出基于物理域避免、主动避免、反应式信号重建和被动调制技术的四类划分方法,深入分析各类策略的原理、优劣及实施挑战,并强调跨学科合作与监管协同对未来发展的关键作用。
288 4
汽车雷达系统的干扰缓解:现状调查与未来趋势——论文阅读
|
Java 测试技术 程序员
内存泄漏:深入探讨、识别与防范
内存泄漏:深入探讨、识别与防范
|
容器
Flutter下拉刷新上拉加载的简单实现方式一
Flutter下拉刷新上拉加载的简单实现方式一
376 2
|
运维 监控 API
深入了解微服务架构:优势与挑战
【10月更文挑战第7天】深入了解微服务架构:优势与挑战
|
存储 人工智能 JSON
基于函数计算FC一键部署ComfyUI绘画平台体验
【8月更文挑战第11天】基于函数计算FC一键部署ComfyUI绘画平台体验
366 1
|
C++
结构体变量与结构体变量指针作为函数参数
结构体变量与结构体变量指针作为函数参数
343 0
|
Java 数据库 Spring
Spring Data JPA: 更新字段采坑记
JPA进行数据库数据的更新,现在总结有以下思路: 当需要更改的字段比较多时,可以将需要更改的字段封装在实体类当中,然后不需要更改的字段通过findone找到对应数据也封装到此实体类当中,然后调用saveandflush方法进行update。
9137 0
|
存储 安全 Java
接入OAuth2
接入OAuth2
248 0

热门文章

最新文章