树1022. 从根到叶的二进制数之和
Posted ocpc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树1022. 从根到叶的二进制数之和相关的知识,希望对你有一定的参考价值。
题目:
解答:
从根节点开始遍历,每向下一个节点,我们可以把父节点传入的值左移一位并或上当前节点的值。
int newval = val << 1 | node->val;
这样我们就得到了一个从根节点到当前节点表示的数值。接下来我们要做的只是判断一个节点是不是叶子节点,如果是的话就累加,否则继续。思路还是很清晰的。代码如下:
调用的时候,原始值我们传入 0
即可。
代码如下:
每个节点遍历一次,时间复杂度 O(N),不需要额外的存储空间,空间复杂度 O(1)。
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 int sum; // 全局变量哈 13 int sumRootToLeaf(TreeNode* root) 14 { 15 sum = 0; 16 dfs(root,0); 17 return sum; 18 } 19 20 void dfs( TreeNode* root, int n) 21 { 22 if(root == NULL) 23 { 24 return; 25 } 26 27 int val = (n<<1) | root->val; 28 29 if(root->left==NULL && root->right==NULL) 30 { 31 sum += val; 32 } 33 else 34 { 35 dfs(root->left,val); 36 dfs(root->right,val); 37 } 38 } 39 };
以上是关于树1022. 从根到叶的二进制数之和的主要内容,如果未能解决你的问题,请参考以下文章