/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
//回溯法
//http://www.cnblogs.com/zhanghaiba/p/3536534.html
//struct ListNode
//{
// int val;
// struct ListNode * next;
//};
//求出一个二叉树中一共有多少个叶子节点,即路径的数目
int getPaths(struct TreeNode * root)
{
int left=0,right=0;
if(root->left==NULL&&root->right==NULL)
{
return 1;
}
if(root->left!=NULL)
{
left=getPaths(root->left);
}
if(root->right!=NULL)
{
right=getPaths(root->right);
}
return left+right;
}
//将整型转换为字符串,其中需要考虑到负数的情况,此部分代码有优化空间
char * intToString(int num)
{
int i=0,l=0;
int temp=0;
char * result;
char * pre;//返回字符串前缀,用来存储符号
int flag=0;
if(num==0)
{
return "0";
}
if(num<0)
{
temp=abs(num);
num=temp;
pre=malloc(sizeof(char)*2);
pre[0]='-';
pre[1]='\0';
}
else
{
temp=num;
pre=malloc(sizeof(char));
pre[0]='\0';
}
while(temp!=0)
{
l++;
temp=temp/10;
}
result=malloc(sizeof(char)*(l+1));
result[l]='\0';
for(i=l-1;i>=0;i--)
{
result[i]=(char)((num%10)+0x30);
num=num/10;
}
strcat(pre,result);
return pre;
}
//将链表转换成字符串,中间用“->”连接
char * listNodeToString(struct ListNode * head)
{
char * result=NULL;
char * temp;
int aa=0;
result=malloc(sizeof(char));
result[0]='\0';
while(head!=NULL)
{
aa=head->val;
temp=intToString(aa);
strcat(result,temp);
head=head->next;
if(head!=NULL)
{
strcat(result,"->");
}
}
return result;
}
int count=0;
void binaryTreePathOut(struct TreeNode * root,char ** result,struct ListNode * head,struct ListNode * location)
{
location->val=root->val;
location->next=NULL;
if(root->left==NULL&&root->right==NULL)
{
//说明到了叶子节点
result[count]=malloc(sizeof(char));
result[count][0]='\0';
strcat(result[count],listNodeToString(head));
count++;
return;
}
location->next=malloc(sizeof(struct ListNode));
location->next->next=NULL;
if(root->left!=NULL)
{
binaryTreePathOut(root->left,result,head,location->next);
}
if(root->right!=NULL)
{
binaryTreePathOut(root->right,result,head,location->next);
}
}
char** binaryTreePaths(struct TreeNode* root, int* returnSize) {
struct ListNode * head;
struct ListNode * location;
char ** result;
char * str;
if(root==NULL)
{
return NULL;
}
//printf(intToString(-1234));
//return NULL;
count=0;
*returnSize=getPaths(root);
result=(char **)malloc(sizeof(char*)*(*returnSize));
head=malloc(sizeof(struct ListNode));
location=head;
binaryTreePathOut(root,result,head,location);
free(head);
return result;
}
257. Binary Tree Paths
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 题目257. Binary Tree Paths Given a binary tree, return all ...
- 1.描述 Given a binary tree, return all root-to-leaf paths.F...
- 原题链接:Binary Tree Paths 一道新题,我想了好久也不会。。。TnT以下代码是在Leetcode官...
- 原题 给一棵二叉树,找出从根节点到叶子节点的所有路径。 样例给出下面这棵二叉树: 所有根到叶子的路径为: 解题思路...
- Given a binary tree, return all root-to-leaf paths. For e...