腾讯音乐笔试题
第三题:
求二叉树最小权值和mod1e9+7 二叉树的子节点要么一个没有要么全有;
只能过15%;考试结束知道问题原因了-_- 原因是在进行左右值相等的时候是根据子节点的子节点去平衡的,应该是递归这个子树,真是乌鱼子 正确解法应该是 加个memo 可以是hashMap 用来存当前节点的树的权值;
思路:
- 进行后序遍历判断当前根节点的两个字节的权值和点是否相等:
1. 如果相等那个当前根节点的值为1 返回当前根节点的二叉树的权值;
2. 如果不想等那个让小的那边的根结点的值等于就用大的权值 - 小的左右子树的权值之和;
之后再用递归递归一遍得到结果;
害 考试没想起来 不知道现在这个解法是正确的不 欢迎大佬解答!!!!!
public class Solution { public int getTreeSum (TreeNode root) { if(root == null) return 0; final double mod = 1e9 + 7; make(root); int res = (int)(getres(root) % mod); return res; } int getres(TreeNode root){ if(root == null) return 0; int left = getres(root.left); int right = getres(root.right); return root.val + left + right; } int make(TreeNode root){ if(root == null) return 0; int left = make(root.left); int right = make(root.right); if(left == right){ root.val = 1; return root.val + left + right; }else { root.val = 1; int l = 0,r = 0; if(left > right){ if(root.right.left != null) l = root.right.left.val; if(root.right.right != null) r = root.right.right.val; root.right.val = left - l - r; }else { if(root.left.left != null) l = root.left.left.val; if(root.left.right != null) r = root.left.right.val; root.left.val = right - l - r; } } return root.val + root.left.val + root.right.val; } }#笔试##腾讯音乐娱乐##腾讯音乐2023秋招笔试心得体会#