博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode Binary Tree Inorder Traversal
阅读量:6586 次
发布时间:2019-06-24

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

Given a binary tree, return the inorder traversal of its nodes' values.

For example:

Given binary tree {1,#,2,3},

非递归版本:

用一个栈来模拟递归的情况,

首先思考inorder traverse的递归函数

traverse(left tree);

visit current node

traverse(right tree);

也就是说我们把一个节点压入栈中,首先它会先递归访问左子树(左节点入栈),再访问本身(这个时候这个节点就可以出栈了),在访问右子树(右节点入栈)。

最后我们定义一个数据结构

1 struct Node2 {3     TreeNode *tNode;4     bool findLeft;5     Node(){}6     Node(TreeNode *n):tNode(n), findLeft(false){}7 };

其中findLeft是判断是否已将左节点入栈了

1 /** 2  * Definition for binary tree 3  * struct TreeNode { 4  *     int val; 5  *     TreeNode *left; 6  *     TreeNode *right; 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8  * }; 9  */10 struct Node11 {12     TreeNode *tNode;13     bool findLeft;14     Node(){}15     Node(TreeNode *n):tNode(n), findLeft(false){}16 };17 18 class Solution {19 private:20     vector
ret;21 public:22 vector
inorderTraversal(TreeNode *root) {23 // Start typing your C/C++ solution below24 // DO NOT write int main() function25 stack
s;26 s.push(Node(root, false));27 ret.clear();28 29 while(!s.empty())30 {31 Node node = s.top();32 if (node.tNode == NULL)33 s.pop();34 else35 {36 if (!node.findLeft)37 {38 s.pop();39 s.push(Node(node.tNode, true));40 s.push(Node(node.tNode->left, false));41 }42 else43 {44 s.pop();45 ret.push_back(node.tNode->val);46 s.push(Node(node.tNode->right, false));47 }48 }49 }50 51 return ret;52 }53 };

 

递归版本:

1 /** 2  * Definition for binary tree 3  * struct TreeNode { 4  *     int val; 5  *     TreeNode *left; 6  *     TreeNode *right; 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8  * }; 9  */10 class Solution {11 private:12     stack
s;13 vector
ret;14 public:15 vector
inorderTraversal(TreeNode *root) {16 // Start typing your C/C++ solution below17 // DO NOT write int main() function18 ret.clear();19 if (root == NULL)20 return ret;21 22 s.push(root);23 TreeNode *node = root;24 while(!s.empty())25 {26 node = node->left;27 s.push(node);28 }29 }30 };

转载地址:http://leqno.baihongyu.com/

你可能感兴趣的文章
checkStyle使用手册
查看>>
MyEclipse weblogic Deploy Location项目名称不正确解决方案
查看>>
3月27日和28日的简单面试记录
查看>>
github https://gitstar-ranking.com/
查看>>
UIMenuController的使用
查看>>
Python异常处理
查看>>
python optparser模块
查看>>
Scala中隐式类代码实战详解之Scala学习笔记-53
查看>>
lammps input for water
查看>>
apache设置虚拟域名以及多站点
查看>>
nginx 日志 cron任务切割日志
查看>>
echarts添加点击事件
查看>>
html实现“加入收藏”代码
查看>>
应收账款对账表
查看>>
ns2仿真结束的.tr文件中的数据意义
查看>>
sqlite3 数据类型 批量插入
查看>>
The fundamental differences between "GET" and "POST"
查看>>
定义类/实例(Class)
查看>>
LINUX内核分析第六周学习总结——进程的描述和进程的创建
查看>>
机器学习之最优化问题
查看>>