LeetCode 606. 根据二叉树创建字符串
作者:互联网
606. 根据二叉树创建字符串
Solution
思路:最开始的思路就是简单的先序遍历,然后就可以得到带有空括号的字符串,再处理即可,代码都写了,然后发现有问题,还是在遍历的时候控制比较好,然后就开始无脑乱改,发现逻辑是通的,不过代码已经成狗屎了,删了重新写,梳理逻辑,1Y
主要是叶节点和非叶节点的)
,应该是叶节点不处理, 统一回退处理,然后存在孩子之一必有(
,然后就是转右孩子的细节)(
class Solution {
StringBuilder str = new StringBuilder();
public String tree2str(TreeNode root) {
if (root == null) return "";
preOrder(root);
return str.toString();
}
void preOrder(TreeNode p) {
str.append(p.val);
if (p.left == p.right && p.left == null) { //处理叶节点 不需要这里加')';
return;
}
if (p.left != null || p.right != null) { //左边不能省 所有存在孩子之一就要有'('
str.append('(');
}
if (p.left != null) { // 左孩子
preOrder(p.left);
}
if (p.right != null) { // 转右孩子的时候 要“封好”又要“开始”
str.append(')');
str.append('(');
preOrder(p.right);
}
str.append(')'); //回退的时候加')'
}
}
//狗屎代码!
class Solution {
StringBuilder str = new StringBuilder();
public String tree2str(TreeNode root) {
if (root == null) return "";
preOrder(root);
return str.toString();
// return dealString(str.toString());
}
void preOrder(TreeNode p) {
// str.append(p.val);
// if (p.left != null || p.right != null) {
// str.append('(');
// }
// if (p.left != null) {
// preOrder(p.left);
// }
// if (p.left == null && p.right != null) {
// str.append(')');
// }
// if (p.left != null || p.right != null) {
// str.append('(');
// }
// if (p.right != null) {
// preOrder(p.right);
// }
// if (p.left == null && p.right != null) {
// str.append(')');
// }
// str.append(')');
}
// String dealString(String res) {
// StringBuilder ans = new StringBuilder();
// char[] s = res.toCharArray();
// int len = res.length();
// int idx = 0;
// while (idx + 1 < len) {
// if (s[idx] == '(' && s[idx + 1] == ')') {
// idx += 2;
// }
// ans.append(s[idx++]);
// }
// return ans.toString();
// }
}
标签:preOrder,606,right,二叉树,str,null,LeetCode,append,left 来源: https://www.cnblogs.com/ACMerszl/p/16025694.html