ディレクトリリンク:
Likouプログラミングの質問-ソリューションの概要-共有+記録-CSDNブログ
GitHub同期ブラッシングプロジェクト:
https://github.com/September26/java-algorithms
https://github.com/September26/java-algorithms
オリジナルタイトルリンク:フォースバックル
説明:
バイナリツリーを括弧と整数で構成される文字列に変換するには、プレオーダートラバーサルを使用する必要があります。
空のノードは、空の括弧「()」のペアで表されます。また、文字列と元の二分木との間の1対1のマッピングに影響を与えない空の括弧のすべてのペアを省略する必要があります。
例1:
入力:二分木:[1,2,3,4]
1 /
\
2 3/4
出力:「1(2(4))(3)」
説明:元々は「1(2(4)())(3())」
でしたが、不要な空括弧のペアをすべて省略した後は「1(2(4))(3)」になります
。
例2:
入力:二分木:[1,2,3、null、4]
1
/ \
2 3
\
4
出力:「1(2()(4))(3)」
説明:最初の例と同様ですが、
入力と出力の間の1対1のマッピングを解除するために、最初の括弧のペアを省略できない点が異なります。
出典:LeetCode
リンク:https ://leetcode-cn.com/problems/construct-string-from-binary-tree
著作権はLeetcode.comに帰属します。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
問題解決のアイデア:
*問題解決のアイデア: *今日の質問は明確に説明されていません。ルールが1つ少なくなります。左側のノードは空であり、右側のノードが空でない場合は、左側のノードを()として記録する必要があります。 *最初に事前注文トラバーサルを再帰的に実行し、stringbuilderを使用して記録します
コード:
public class Solution606 {
public String tree2str(TreeNode root) {
StringBuilder builder = new StringBuilder();
search(root, builder);
return builder.toString();
}
private void search(TreeNode root, StringBuilder builder) {
if (root == null) {
return;
}
builder.append(root.val);
//左节点为空,右节点不为空时,左节点要记录成()
if (root.left != null || root.right != null) {
builder.append("(");
search(root.left, builder);
builder.append(")");
}
//右节点为空就不记录
if (root.right != null) {
builder.append("(");
search(root.right, builder);
builder.append(")");
}
}
}