栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

输出二叉树的所有路径-c语言dfs

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

输出二叉树的所有路径-c语言dfs

输出二叉树的所有路径-c语言dfs

这个题目还是很有趣的叭,甚至可以说很实用的一个题目了,大家感兴趣可以学习一下
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。

叶子节点 是指没有子节点的节点。

示例 1:

输入:root = [1,2,3,null,5]
输出:[“1->2->5”,“1->3”]

示例 2:

输入:root = [1]
输出:[“1”]
代码实现如下:




 int len(int a){
     int s=0;
    int n=abs(a);
   
     while(n){
         n=n/10;
         s++;
     }
    
     return s;
 }
 void dfs(struct TreeNode* root ,int  size,char ** s,int po,int  *returnSize){
     int c;
     int j;
     if(size>*returnSize){
         *returnSize=size;
     }
     if(root){

          if(s[size][0]!=''){
    //      printf("df1");
           s[size][po]='-';
           s[size][po+1]='>';

          }
          if(po==1&&s[size][0]==''){
              po=po-3;
          }
          
           int length=len(root->val);
           int n=abs(root->val);
           int i=1;
           if(root->val<0){
               length=length+1;
           }
           
           while(n){
          //      printf("df2");
               c=n%10;
               n=n/10;
               s[size][po+length+i]=0x30+c;
               i--;
           }
              if(root->val<0){
               s[size][po+length+i]='-';
           }

           if(root->left&&root->right){
               dfs(root->left,size,s,po+length+2,returnSize);
                  (*returnSize)++;
               for(j=0;j
                   s[*returnSize][j]=s[size][j];
               }

                dfs(root->right,*returnSize,s,po+length+2,returnSize);
           }
           if(root->left&&root->right==NULL){
               dfs(root->left,size,s,po+length+2,returnSize);
           }
            if(root->left==NULL&&root->right){
               dfs(root->right,size,s,po+length+2,returnSize);
           }

           if(root->left==NULL&&root->right==NULL){
               s[size][po+length+2]='';
           }
     }
     else{
         s[size][po]='';
     }
     
  


 }
// ["1->2->5","1->3"]
//["1->2->5","1->3"]
 
char ** binaryTreePaths(struct TreeNode* root, int* returnSize){
    char ** s=(char **)malloc(sizeof(char *)*100);
    int i=0;
  
    for(i=0;i<100;i++){
        s[i]=(char *)malloc(sizeof(char)*100);
        s[i][0]='';
    
    }
    *returnSize=0;
    dfs(root,0,s,1,returnSize);
     
    (*returnSize)++;
   // printf("df3");
   printf("%d ",*returnSize);
    
    return s;

}
















转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873190.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号