码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode[96] Binary Tree Inorder Traversal

时间:2014-11-25 01:34:34      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   sp   for   on   

给定树根root。实现中序遍历,也就是左根右。

用递归的话,很简单,左边的返回值加上root的再加上右边的就行。

我自己写的有点挫:

/**
 * 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> lf, ri, ans;
        if (root == NULL) return ans;
        lf = inorderTraversal(root -> left);
        ri = inorderTraversal(root -> right);
        lf.push_back(root -> val);
        for (int i = 0; i < ri.size(); ++i)
        {
            lf.push_back(ri[i]);
        }
        return lf;
    }
};

其实可以写简单一些

class Solution {
public:
    vector<int> inorderTraversal(TreeNode *root) {
        vector<int> vi;
        inHelper(root, vi);
        return vi;
    }

    void inHelper(TreeNode *node, vector<int>& vi)
    {
        if(node == nullptr) return;
        inHelper(node->left, vi);
        vi.push_back(node->val);
        inHelper(node->right, vi);
    }
};

题目要求如果不用递归的话,用如下leetcode上的,利用堆,很妙。

vector<int> inorderTraversal(TreeNode *root) 
    {
        vector<int> rs;
        if (!root) return rs;
        stack<TreeNode *> stk;
        TreeNode *p = root;
        while (!stk.empty() || p)
        {
            if (p)
            {
                stk.push(p);
                p = p->left;
            }
            else
            {
                p = stk.top();
                stk.pop();
                rs.push_back(p->val);
                p = p->right;
            }
        }
        return rs;
    }

 

leetcode[96] Binary Tree Inorder Traversal

标签:style   blog   http   io   ar   color   sp   for   on   

原文地址:http://www.cnblogs.com/higerzhang/p/4120016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!