二叉树中序遍历-lintcode

来源:互联网 发布:淘宝上的车秒贷靠谱吗 编辑:程序博客网 时间:2024/04/28 03:13

这个就是递归和非递归两种方法,非递归难一点,但是不用调用栈。

递归:

注意vector相接的方法,用insert(,,)。

C++代码:

/** * 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) {        vector<int> result;        if(root==NULL)            return result;        vector<int> temp = inorderTraversal(root->left);        result.insert(result.end(),temp.begin(),temp.end());        result.push_back(root->val);        temp = inorderTraversal(root->right);        result.insert(result.end(),temp.begin(),temp.end());        return result;    }};

非递归:

使用一个TreeNode*的stack,每次都循环向stack中添加temp指向的左子树节点,然后用temp指针接受stack的pop(),使用这个指针后将它指向它的右子树,再次回到push()的循环中。

C++代码:

/** * 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) {        vector<int> result ;        stack<TreeNode *> sta;        TreeNode * temp = root;        if (root == NULL)            return result;        while(!sta.empty() || temp!=NULL){            while(temp!=NULL){                sta.push(temp);                temp = temp->left;            }            if(!sta.empty()){                temp = sta.top();                result.push_back(temp->val);                sta.pop();                temp = temp->right;            }        }        return result;    }};


0 0
原创粉丝点击