536. Construct Binary Tree from String
You need to construct a binary tree from a string consisting of parenthesis and integers.
The whole input represents a binary tree. It contains an integer followed by zero, one or two pairs of parenthesis. The integer represents the root’s value and a pair of parenthesis contains a child binary tree with the same structure.
You always start to construct the left child node of the parent first if it exists.
Example:
Input: "4(2(3)(1))(6(5))"
Output: return the tree root node representing the following tree:
4
/ \
2 6
/ \ /
3 1 5
Note:
- There will only be ‘(’, ‘)’, ‘-’ and ‘0’ ~ ‘9’ in the input string.
- An empty tree is represented by “” instead of “()”.
方法1: stack
思路:
/**
* 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:
TreeNode* str2tree(string s) {
if (s.empty()) return nullptr;
stack<TreeNode*> st;
int i = 0;
TreeNode* head = nullptr;
while (i < s.size()) {
if (s[i] == ')') st.pop();
else if (isdigit(s[i]) || s[i] == '-') {
int j = i;
while (isdigit(s[i + 1])) i++;
int num = stoi(s.substr(j, i - j + 1));
TreeNode* head = new TreeNode(num);
if (!st.empty()) {
if (!st.top() -> left) st.top() -> left = head;
else st.top() -> right = head;
}
st.push(head);
}
i++;
}
return st.top();
}
};
方法2: recursion
grandyang: https://www.cnblogs.com/grandyang/p/6793904.html
思路: