描述
您需要从包含括号和整数的字符串中构造一个二叉树。
整个的输入表示一个二叉树。它包含一个整数,或零,或两对括号。该整数表示根的值,而一对括号包含一个具有相同结构的子二叉树。
如果父节点存在,您总是首先开始构造它的左子节点。
在输入字符串中只有'(',')','-'和'0' ~ '9'。
空树表示为“”而不是“()”。
样例
给定 s = “4(2(3)(1))(6(5))”, 返回表示下面树的节点:
4
/ \
2 6
/ \ /
3 1 5
代码
使用栈来存储二叉树的节点,然后遇到左括号,随后读取该括号后面的数字,并且形成TreeNode节点,然后读取栈顶元素(头结点),并且把该节点连接到左指针或右指针中。如果遇到右括号,直接把栈顶元素弹出。
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/
import java.util.*;
public class Solution {
/**
* @param s: a string
* @return: a root of this tree
*/
int i=0;
public TreeNode str2tree(String s) {
// write your code here
if("".equals(s)){
return null;
}
Stack<TreeNode> nodes=new Stack<>();
TreeNode root=null;
while(i<s.length()){
char ch=s.charAt(i);
if(ch==')'){
nodes.pop();
i++;
}
else if(ch=='('){
i++;
int val=getVal(s);
TreeNode q=new TreeNode(val);
TreeNode temp=nodes.peek();
if(temp.left==null){
temp.left=q;
}else if(temp.right==null){
temp.right=q;
}
nodes.push(q);
}
else if(ch=='-'||(ch>='0'&&ch<='9')){
int val=getVal(s);
if(root==null){
root=new TreeNode(val);
nodes.push(root);
}
}
}
return root;
}
private int getVal(String s){
StringBuilder num=new StringBuilder();
boolean positive=true;
char ch=s.charAt(i);
if(ch=='-'){
i++;
positive=false;
}
while(i<s.length()&&(s.charAt(i)>='0'&&s.charAt(i)<='9')){
num.append(s.charAt(i++));
}
int temp=Integer.valueOf(num.toString());
return positive==true?temp:-temp;
}
}
本文介绍了一种通过解析包含括号和整数的字符串来构建二叉树的方法。利用栈来辅助实现,针对输入字符串的特点,文章详细描述了如何根据括号及数值构造出对应的二叉树结构。
4824

被折叠的 条评论
为什么被折叠?



