树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. 从根到叶的二进制数之和的主要内容,如果未能解决你的问题,请参考以下文章

1022. 从根到叶的二进制数之和

1022. 从根到叶的二进制数之和

LeetCode 1022. 从根到叶的二进制数之和

LeetCode 1022 从根到叶的二进制数之和[dfs] HERODING的LeetCode之路

DFS | 从根到叶的二进制数之和附递归展开图

给定一棵二叉树,找到所有从根到叶的路径