• LintCode 二叉树的中序遍历


    给出一棵二叉树,返回其中序遍历

    样例

    给出二叉树 {1,#,2,3},

       1
        
         2
        /
       3

    返回 [1,3,2].

    挑战 

    你能使用非递归算法来实现么?

    分析:同前序遍历。

    /**
     * Definition of TreeNode:
     * class TreeNode {
     * public:
     *     int val;
     *     TreeNode *left, *right;
     *     TreeNode(int val) {
     *         this->val = val;
     *         this->left = this->right = NULL;
     *     }
     * }
     */
    class Solution {
        /**
         * @param root: The root of binary tree.
         * @return: Inorder in vector which contains node values.
         */
    public:
        vector<int> inorderTraversal(TreeNode *root) {
            // write your code here
          TreeNode *curr=root;
          stack<TreeNode *> mystack;
          vector<int> res;
          while(!mystack.empty()||curr!=NULL)
          {
              while(curr!=NULL)
              {
                  
                  mystack.push(curr);
                  curr=curr->left;
              }
              if(!mystack.empty())
              {
                  curr=mystack.top();
                  res.push_back(curr->val);
                  mystack.pop();
                  curr=curr->right;
              }
          }
          return res;
        }
    };


    用数组指针
    /**
     * Definition of TreeNode:
     * class TreeNode {
     * public:
     *     int val;
     *     TreeNode *left, *right;
     *     TreeNode(int val) {
     *         this->val = val;
     *         this->left = this->right = NULL;
     *     }
     * }
     */
    class Solution {
        /**
         * @param root: The root of binary tree.
         * @return: Inorder in vector which contains node values.
         */
    public:
        vector<int> inorderTraversal(TreeNode *root) {
            // write your code here
             TreeNode *curr=root;
             TreeNode *mystack[1000];
             int top=0;
             vector<int> res;
             while(top!=0||curr!=NULL)
             {
                 while(curr!=NULL)
                { 
                 
                 mystack[top++]=curr;
                 curr=curr->left;
                }
             
             if(top>0)
             {
                 top--;
                 curr=mystack[top]; 
                 res.push_back(curr->val);
                 curr=curr->right;
                 
             }
             }
             return res;
        }
    };
    

      

  • 相关阅读:
    XML 命名空间
    XML Schema验证
    java 解析XML文档
    Java线程:创建与启动
    CCF-CSP 201312-5 I'm stuck !
    memset函数用法
    C++的字符串多行输入
    OS复习1
    os复习2
    javamail编程2
  • 原文地址:https://www.cnblogs.com/lelelelele/p/6115300.html
Copyright © 2020-2023  润新知