美文网首页
257. Binary Tree Paths

257. Binary Tree Paths

作者: larrymusk | 来源:发表于2017-12-02 13:19 被阅读0次
    /**
     * 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

          本文链接:https://www.haomeiwen.com/subject/emdnbxtx.html