LeetCode 94. 二叉树的中序遍历(Binary Tree Inorder Traversal)

题目描述

 

给定一个二叉树,返回它的中序 遍历。

示例:

输入: [1,null,2,3]
   1
    \
     2
    /
   3

输出: [1,3,2]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

 

解题思路

 

由于中序遍历的顺序是左孩子->父节点->右孩子,所以在遍历到某节点时,先依次把所有左孩子入栈,找到最左边的子节点后,输出该节点,然后继续遍历该节点的右孩子。

 

代码

 

 1 /**
 2  * Definition for a binary tree node.
 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 public:
12     vector<int> inorderTraversal(TreeNode* root) {
13         vector<int> res;
14         stack<TreeNode*> s;
15         TreeNode *node = root;
16         while(node || s.size()){
17             while(node){
18                 s.push(node);
19                 node = node->left;
20             }
21             node = s.top();
22             res.push_back(node->val);
23             s.pop();
24             if(node->right)
25                 node = node->right;
26             else node = NULL;
27         }
28         return res;
29     }
30 };

 

posted @ 2018-08-17 16:00  FlyingWarrior  阅读(147)  评论(0编辑  收藏  举报