zoukankan      html  css  js  c++  java
  • LeetCode 94. 二叉树的中序遍历(C++实现)


    1.递归

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

    2.迭代
    思路:每到一个节点 A,因为根的访问在中间,将 A 入栈。然后遍历左子树,接着访问 A,最后遍历右子树。
    在访问完 A 后,A 就可以出栈了。因为 A 和其左子树都已经访问完成。
    即先将结点入栈然后找最左子树,没轮查找都将结点本身入栈,然后开始输出最左结点和根结点,如此处理右子树,只到整棵树遍历完,即栈空

    class Solution {
    public:
        vector<int> inorderTraversal(TreeNode* root) {
            vector<int> inOrder;
            stack<TreeNode*> st;
            TreeNode* temp = root;
            while(temp||st.empty()==false){    
                while(temp!=NULL){
                    st.push(temp);
                    temp = temp->left;
                }
                printf("%d ",st.top()->val);
                temp = st.top();
                inOrder.push_back(temp->val);
                st.pop();
                temp = temp->right;
         
            } 
            return inOrder;
        }
    };
    
  • 相关阅读:
    微信支付退款部分代码
    Raspberry PI 点亮LED
    Raspberry PI 摄像头
    RaspberryPI 3B系统烧录
    MySQL基础使用
    MySQL数据库管理系统概述
    Eclipse创建JAVA项目
    Brup Suite拦截https请求
    Github 第一个仓库
    python os模块主要函数
  • 原文地址:https://www.cnblogs.com/shuibeng/p/13626802.html
Copyright © 2011-2022 走看看