leetcode 94 二叉树的中序遍历

方法1:递归(用到两个函数)

   vector<int> inorderTraversal(TreeNode* root) {
       vector<int> result;
       inorder(root,result);
       return result;
   }
   void inorder(TreeNode* root,vector<int>& result){
       if(root==NULL)return;
       if(root->left) inorder(root->left,result);
       result.push_back(root->val);
       if(root->right) inorder(root->right,result);
   }

方法2:不用递归(栈)
思路:将根节点压入栈,如果根节点一直有左子节点,则一直将左子节点压入栈直到左子节点不存在,然后取栈顶元素,将栈顶元素放入结果中,若存在右子节点,则下次循环的时候将所有的右子节点的左子节点压入栈。访问的顺序就是左-根-右

vector<int> inorderTraversal(TreeNode* root) {
      //栈
      vector<int> result;
      stack<TreeNode*> temp;
      TreeNode* p = root;
      while(p||!temp.empty()){
          while(p){
              temp.push(p);
              p=p->left;
          }
          p=temp.top();temp.pop();
          result.push_back(p->val);
          p=p->right;
      }
      return result;

  }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容