标签:tree mic 左移 idt binary inf lse dfs oid
题目:
解答:
从根节点开始遍历,每向下一个节点,我们可以把父节点传入的值左移一位并或上当前节点的值。
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 };
标签:tree mic 左移 idt binary inf lse dfs oid
原文地址:https://www.cnblogs.com/ocpc/p/12822237.html