- Binary treeλ₯Ό rootλΆν° leaf κΉμ§ νμνμ λμ κ²½λ‘λ₯Ό λΌκ³ ν λ μ μνλ λ
Έλλ₯Ό μμμ μμλ‘ λμ΄νμ¬ νλ¬Έ(palindrome)μ λ§λ€ μ μλ κ²½λ‘μ μλ₯Ό ꡬνλ λ¬Έμ .
- κ²½λ‘μ μν λ
Έλλ₯Ό μμ λ‘κ² λ°°μΉν μ μλ€λ©΄ νλ¬Έμ λ§λ€κΈ°μν 쑰건μ μλμ κ°λ€.
- κ²½λ‘μ μν κ° λ
Έλμ μ«μ λ³ μΆν λΉλλ₯Ό μΈμμ λ μΆν λΉλκ° νμμΈ μ«μμ μ’
λ₯κ° 1κ° μ΄νμ¬μΌ νλ€.
- μ½κ² μκ°νλ©΄ λͺ¨λ μ«μκ° μ§μ νμλ§νΌ μΆννλ€λ©΄ λ¬Έμμ΄μ λ°μΌλ‘ λλμ΄ μμͺ½μ λμΉμΌλ‘ λ°°μΉν μ μμ κ²μ΄λ€ (μ:
bbaaaabb
). - λ§μΌ νΉμ μ«μλ§ νμ νμ μΆννλ€λ©΄ ν΄λΉ λ¬Έμλ₯Ό νκ°λ§ κ°μ΄λ°μ λ°°μΉνκ³ λλ¨Έμ§λ μμͺ½μ λμΉμΌλ‘ λ°°μΉνλ©΄ λλ€ (μ:
bba
a
abb
). - νμ§λ§ νμ νμ μΆνν μ«μμ μ’
λ₯κ° 2κ° μ΄μμ΄λΌλ©΄ μμ κ°μ΄ λμΉμΌλ‘ λ°°μΉν μ μλ λ°©λ²μ΄ μμΌλ―λ‘ νλ¬Έμ λ§λ€ μ μλ€.
- κ²°κ΅ κ²½λ‘λ§λ€ κ° μ«μλ³λ‘ μΆν λΉλλ₯Ό νμΈνκ³ νμλ² μΆνν μ«μμ μκ° 1κ° μ΄νμΈμ§ νμΈνλ©΄ λλ€.
- λ
Έλμ μ«μλ 1 ~ 9κ° μ¬ μ μκ³ μΆνλΉλκ° νμ, μ§μ μΈμ§λ§ νμΈνλ©΄ λλ€.
- Integerμ 1 ~ 9λ²μ§Έ bitλ₯Ό κ° μ«μμ λμμμΌ μ«μκ° μΆνν λ λ§λ€ bitλ₯Ό toggleνλ€.
- μ΅μ’
μ μΌλ‘ 1λ‘ μ€μ λ bitμ μλ₯Ό μΈλ©΄ νμλ² μΆνν μ«μμ κ°μλ₯Ό μ
μ μλ€.
class Solution {
int traverse(TreeNode node, int state) {
state ^= 1 << node.val;
boolean isLeaf = node.left == null && node.right == null;
if (isLeaf) {
return Integer.bitCount(state) <= 1? 1 : 0;
}
int result = 0;
if (node.left != null)
result += traverse(node.left, state);
if (node.right != null)
result += traverse(node.right, state);
return result;
}
public int pseudoPalindromicPaths (TreeNode root) {
return traverse(root, 0);
}
}