最近消失好久,因为跳槽到华为做路由器,又开始学起了C,刷OJ题..
题目:
给定一个二叉树,它的每个结点都存放一个 0-9 的数字,每条从根到叶子节点的路径都代表一个数字。
例如,从根到叶子节点路径 1->2->3 代表数字 123。
计算从根到叶子节点生成的所有数字之和。
说明: 叶子节点是指没有子节点的节点。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sum-root-to-leaf-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我的做法:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
void getNum1(struct TreeNode* root,int *sum,int temp){
if(root->right==NULL && root->left==NULL){
temp=temp*10+root->val;
(*sum)+=temp;
temp=temp/10;
return;
}else{
temp=temp*10+root->val;
}
if(root->left!=NULL) getNum1(root->left,sum,temp);
if(root->right!=NULL) getNum1(root->right,sum,temp);
}
int sumNumbers(struct TreeNode* root){
if(root==NULL) return 0;
int* sum=(int*)malloc(10*sizeof(int));
int temp=0;
*sum=0;
temp=0;
getNum1(root,sum,temp);
return *sum;
}
另外一个大神的做法:
int getNum1(struct TreeNode* root,int i){
if(root == NULL) return 0;
int temp= i * 10+root->val;
if(root->left == NULL && root->right == NULL){
return temp;
}
return getNum1(root->left,temp) + getNum1(root->right,temp);
}