前言
前序遍历,分为四种情况
- 有俩孩子
都要括号 - 无左右孩子
不要括号 - 有右孩子,无左孩子
需先加个空括号,右孩子递归外层加括号 - 有左孩子,无右孩子
只要左孩子加括号,右孩子不加括号
题目
源码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public String tree2str(TreeNode t) {
// 方法1,递归
// if(t==null){
// return "";
// }
// if(t.left==null && t.right == null){
// return t.val+"";
// }
// if(t.right==null){
// return t.val +"("+tree2str(t.left)+")";
// }
// return t.val+"("+tree2str(t.left)+")("+tree2str(t.right)+")";
// 方法2 迭代
if(t==null){
return "";
}
Stack<TreeNode> stack=new Stack<>();
Set <TreeNode> visited =new HashSet<>();
StringBuilder ans=new StringBuilder();
stack.push(t);
while(!stack.isEmpty()){
t=stack.peek();
if(visited.contains(t)){
stack.pop();
ans.append(")");
}else{
visited.add(t);
ans.append("("+t.val);
if(t.left==null && t.right!=null){
ans.append("()");
}
if(t.right!=null){
stack.push(t.right);
}
if(t.left!=null){
stack.push(t.left);
}
}
}
return ans.substring(1,ans.length()-1);
}
}