一、     题目

      给一个二叉树。中序遍历这个树,输出得到的值

二、     分析

     这道题前面见到了,多次隔过去了,今天最终面对了,当时是没有好的思路。自习想想越是太难。Leetcode上的题,递归是统法啊!

      方法一:递归

         1.    开辟数组,递归左节点

         2.    将中间结点放入数组

         3.    递归有节点

     方法二:使用数组和栈

        1.    将根节点入栈

         2.    设置标志或推断条件。一直向左入栈

        3.    出栈并入数组

     基本上递归和非递归思路就是这样。非常easy的说。


/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> inorderTraversal(TreeNode *root) {
        vector<int> ans;
		inorder(root,ans);
		return ans; 
    }
    
    void inorder(TreeNode *node,vector<int>&ans)
    {
    	if(node == NULL)
    		return;
    	inorder(node->left,ans);
    	ans.push_back(node->val);
    	inorder(node->right,ans);
    }
};

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> inorderTraversal(TreeNode *root) {
        vector<int> ans;
        stack<TreeNode *> sta;
        TreeNode *ptr = root;
        while(!sta.empty()||ptr){
        	if(ptr){
        		sta.push(ptr);
        		ptr = ptr->left;
        	}
        	else {
        		ptr = sta.top();
        		sta.pop();
        		ans.push_back(ptr->val);
        		ptr = ptr->right;
        	}
        }
		return ans; 
    }
};

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> inorderTraversal(TreeNode *root) {
        vector<int> ans;
        if(!root)
        	return ans;
        stack<TreeNode *> sta;
        sta.push(root);
        while(!sta.empty()){
        	while(sta.top()->left)
        		sta.push(sta.top()->left);
            TreeNode *t = sta.top();
            ans.push_back(t->val);
            sta.pop();
            if(!sta.empty())
            	sta.top()->left = NULL;
            if(t->right) 
            	sta.push(t->right);
		}
		return ans; 
    }
};


posted on 2017-07-19 21:14  lxjshuju  阅读(120)  评论(0编辑  收藏  举报