LeetCode 94: Binary Tree Inorder Traversal

来源:互联网 发布:java好学吗 编辑:程序博客网 时间:2024/06/05 01:04

Binary Tree Inorder Traversal

Given a binary tree, return the inorder traversal of its nodes’ values.

For example:
Given binary tree {1,#,2,3},
二叉树
return [1,3,2].

Note: Recursive solution is trivial, could you do it iteratively?

解题思路

中序遍历二叉树。

思路一:使用递归(recursion)。代码如下:

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {private:    void inorderTraversal(TreeNode *root, vector<int> &result) {        if (root == NULL) return; // 递归结束        // 递归访问 root 的左子树        inorderTraversal(root->left, result);        // 访问 root 结点        result.push_back(root->val);        // 递归访问 root 的右子树        inorderTraversal(root->right, result);    }public:    vector<int> inorderTraversal(TreeNode* root) {        vector<int> result;        inorderTraversal(root, result);        return result;    }};

思路二:利用栈(stack)进行迭代(iteration)。代码如下:

/** * Definition for a binary tree node. * 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> result;        if (root == NULL) return result;        // 使用栈保存结点的访问路径        stack<TreeNode *> nodeStack;         TreeNode *p = root;        while (p != NULL || !nodeStack.empty()) {            while (p != NULL) {                nodeStack.push(p);                p = p->left;            }            if (!nodeStack.empty()) {                p = nodeStack.top();                nodeStack.pop();                result.push_back(p->val);                p = p->right;            }        }        return result;    }};
0 0
原创粉丝点击