zoukankan      html  css  js  c++  java
  • <Interview Problem>二叉树根到叶节点求和值匹配

        题目大意:一颗二叉树,每个节点都有一个Value, 判断根节点到叶节点的路径求和值是否等于某个数Sum.

    比如说如下这样一颗二叉树,76是45,21,10这条路径的求和值,77就没有满足条件的路径。

                                45

                        21            65

                   10    24      50   70

    代码依旧用C++来实现,二叉树一般采用递归的方式来解决。

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 typedef struct BTree
     6 
     7 {
     8         int value;
     9         struct BTree* left;
    10         struct BTree* right;
    11 } BTree;
    12 typedef struct BTree Node;
    13 
    14 //recursively insert a tree node   
    15 
    16 BTree* Insert(BTree* T, int value)
    17 {
    18       if(T == NULL)
    19       {
    20         T = (BTree*)malloc(sizeof(struct BTree));
    21         if(T == NULL)
    22                 printf("Malloc failed");
    23         else{
    24                 T->value = value;
    25                 T->left = T->right = NULL;
    26         }
    27       }
    28       else if(value < T->value)
    29         T->left = Insert(T->left,value);
    30       else if(value > T->value)
    31         T->right = Insert(T->right,value);
    32       return T;
    33 }
    34 BTree* MakeEmpty(BTree* T)
    35 {
    36         if(T != NULL){
    37                 MakeEmpty(T->left);
    38                 MakeEmpty(T->right);
    39                 free(T);
    40         }
    41         return NULL;
    42 }
    43 
    44 
    45 bool hasPathSum( Node *node, int sum, int pathSum)
    46 {
    47         bool match = false;
    48         if(node != NULL)
    49                 pathSum += node->value;
    50         if(node->left== NULL && node->right == NULL)
    51         {
    52                 if(sum == pathSum)
    53                         match = true;
    54                 else
    55                         match = false;
    56         }
    57         if(node->left != NULL && !match)
    58                 match = hasPathSum(node->left,sum,pathSum);
    59         if(node->right != NULL && !match)
    60                 match = hasPathSum(node->right,sum,pathSum);
    61         return match;
    62 }
    63 bool hasPathSum( Node *root, int sum)
    64 {
    65         if(root == NULL) return false;
    66          bool match = false;
    67          match = hasPathSum(root,sum,0);
    68          return match;
    69 }
    70 int main()
    71 {
    72         BTree* T = NULL;
    73         T = Insert(T,45);
    74         T = Insert(T,21);
    75         T = Insert(T,65);
    76         T = Insert(T,10);
    77         T = Insert(T,50);
    78         T = Insert(T,70);
    79         T = Insert(T,24);
    80         bool match = hasPathSum(T,76);
    81         cout << match << endl;
    82         match = hasPathSum(T,77);
    83         cout << match << endl;
    84         MakeEmpty(T);
    85         return 0;
    86 }
    View Code
  • 相关阅读:
    kafka消费者如何才能从头开始消费某个topic的全量数据
    kafka消费者客户端启动之后消费不到消息的原因分析
    JMeter测试工具中的参数化使用[函数助手]
    在IDEA中使用gradle配置打可执行jar包[可执行jar与其所依赖的jar分离]
    一次tomcat配置参数调优Jmeter压力测试记录前后对比
    IntelliJ IDEA 14.1.4导入项目启动报错:Error during artifact deployment.[组件部署期间出错]
    BZOJ2861 : 双向边定向为单向边
    BZOJ4313 : 三维积木
    BZOJ4714 : 旋转排列
    BZOJ1395 : [Baltic2005]Trip
  • 原文地址:https://www.cnblogs.com/cstar/p/3353609.html
Copyright © 2011-2022 走看看