zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    

      

  • 相关阅读:
    iOS中Zbar二维码扫描的使用
    SOJ 1135. 飞跃原野
    SOJ 1048.Inverso
    SOJ 1219. 新红黑树
    SOJ 1171. The Game of Efil
    SOJ 1180. Pasting Strings
    1215. 脱离地牢
    1317. Sudoku
    SOJ 1119. Factstone Benchmark
    soj 1099. Packing Passengers
  • 原文地址:https://www.cnblogs.com/lelelelele/p/6115300.html
Copyright © 2011-2022 走看看