Revise Tree With One Zero
题目:
一个完全树,node的值为0或者1,每个parent的val是两个child ‘and’的结果,现在把一个leaf flip一下(0->1 or 1->0),把tree修正一遍。
解题思路:
这道题主要用bottom-up的方法来解决。首先找到那个node,然后往上一步一步修正。
代码:
一个完全树,node的值为0或者1,每个parent的val是两个child ‘and’的结果,现在把一个leaf flip一下(0->1 or 1->0),把tree修正一遍。
解题思路:
这道题主要用bottom-up的方法来解决。首先找到那个node,然后往上一步一步修正。
代码:
public class ReviseTreeWithOneZero { static class TreeNode{ int val; TreeNode left; TreeNode right; boolean flipped = false; public TreeNode(int val){ this.val = val; } } public static int revise(TreeNode root){ if(root.left == null && root.right == null){ if(root.flipped){ return root.val ^ 1; } else{ return root.val; } } int left = revise(root.left); int right = revise(root.right); return left & right; } public static void print(TreeNode root){ if(root == null){ return; } print(root.left); System.out.println(root.val); print(root.right); } public static void main(String[] args){ TreeNode node4 = new TreeNode(0); TreeNode node1 = new TreeNode(1); TreeNode node2 = new TreeNode(1); node2.flipped = true; TreeNode node3 = new TreeNode(1); TreeNode node5 = new TreeNode(0); TreeNode node6 = new TreeNode(0); TreeNode node7 = new TreeNode(1); node3.right = node2; node3.left = node1; node6.left = node5; node6.right = node7; node4.left = node3; node4.right = node6; System.out.println("before: "); print(node4); revise(node4); System.out.println("after: "); print(node4); } }

Comments
Post a Comment