中序遍历(递归+迭代)

题目要求

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

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

输出: [1,3,2]

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

解答:

迭代算法可用栈保存曾经路过的中序结点,回溯时可用bool型变量屏蔽对左子树的访问,避免发生死循环。

代码及分析注释如下:

#include
#include
using namespace std;

struct TreeNode {
   
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {
   }
 };
 
//中序遍历递归算法
void inOrder(TreeNode* root, vector<int>& vi) {
   
    if (root != NULL) {
   
        inOrder(root->left, vi<

你可能感兴趣的:(算法)