深度优先遍历
今天的每日一题:1202. 从根到叶的二进制数之和。 简单来说,就是给定一颗层序遍历的数组,表示一颗树,例如: 输入:root = [1,0,1,0,1,0,1] 输出:22 解释:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22 可以表示为: 1 / \ 0 1 / \ / \ 0 1 0 1 思路就是使用dfs来遍历这个树,代码为: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int dfs(TreeNode *root, int val) { if (root == nullptr) return 0; val = val << 1 | root->val; if (root->left == nullptr && root->right == nullptr) return val; return dfs(root->left, val) + dfs(root->right, val); } int sumRootToLeaf(TreeNode* root) { return dfs(root, 0); } }; 拿到这个题就知道用dfs,但是这个计算的方式确实没想到,二进制移位操作,并且使用局部变量保存临时结果,就不需要复杂的字符串拼接然后转换10进制了,例如上例: ...