题目
解题思路:
首先确定出根节点
然后确定出左右节点的字符串,把这两个字符串交给递归处理
4(2(3)(1))(6(5))
发现规律 4没有括号 直接就是最上层根节点 发现左括号前是root,
然后2(3)(1)和6(5) 成对的括号 只一个树的完整结构
代码实现
结果最好debug看下 我偷懒没有打印
public class LeetCode536 {
//定义一个树结构
public static class TreeNode{
int root;
TreeNode left;
TreeNode right;
public TreeNode(int root) {
this.root = root;
}
public TreeNode(int root, TreeNode left, TreeNode right) {
this.root = root;
this.left = left;
this.right = right;
}
}
public static TreeNode strToTree(String s){
if(s==null || s.length()<1){
return null;
}
//一开始就有括号就 直接去掉
if(s.charAt(0)=='('&&s.charAt(s.length()-1)==')'){
s=s.substring(1,s.length()-1);
}
int index =0;
TreeNode treeNode=null;
//获取根节点
while (index<s.length()){
if(s.charAt(index)=='(') {
treeNode=new TreeNode(Integer.parseInt(s.substring(0, index)));
break;
}
index++;
}
//没有括号直接返回
if (index==s.length()){
treeNode=new TreeNode(Integer.parseInt(s.substring(0, index)));
return treeNode;
}
//记录最左(所以
int left=index;
//对括号号计数器
int count=0;
//获取 左右节点的字符串
while (index<s.length()-1){
if(s.charAt(index)=='('){
count++;
}else if(s.charAt(index)==')'){
count--;
}
//说明左节点字符串 最右边的)的索引
if(count==0){
break;
}
index++;
}
//获取左右节点字符串 并且递归获取树
TreeNode leftTreeNode = strToTree(s.substring(left + 1, index));
TreeNode rightTreeNode = strToTree(s.substring(index + 1));
treeNode.left=leftTreeNode;
treeNode.right= rightTreeNode;
return treeNode;
}
public static void main(String[] args) {
TreeNode treeNode = strToTree("4(2(3)(1))(6(5))");
int root = treeNode.root;
System.out.println("");
}
}