Day-05-二叉树与图 Leetcode-113, 236, 113, 199, 207

目录

例一:LeetCode113​

例二:LeetCode236

例三:LeetCode114​

例四:LeetCode199

例五:LeetCode207


//预备知识:二叉树的构造
#include <stdio.h>
struct TreeNode {
       int val;
       TreeNode* left;
       TreeNode* right;
       TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void preorder_print(TreeNode* node, int layer) {
       if (!node) {
              return;
       }
       for (int i = 0; i < layer; i++) {
              printf("------");//根据层数打印------
       }
       printf("[%d]\n", node->val);
       preorder_print(node->left, layer + 1);
       preorder_print(node->right, layer + 1);
}
void traversal(TreeNode* node) {
       if (!node) {
              return;
       }
       //前序遍历
       printf("[%d]\n", node->val);
       traversal(node->left);
       traversal(node->right);
       //     //中序遍历
       //     traversal(node->left);
       //     printf("[%d]\n", node->val);
       //     traversal(node->right);
       //
       //     //后序遍历
       //     traversal(node->left);
       //     traversal(node->right);
       //     printf("[%d]\n", node->val);
}
int main() {
       TreeNode a(1);
       TreeNode b(2);
       TreeNode c(5);
       TreeNode d(3);
       TreeNode e(4);
       TreeNode f(6);
       a.left = &b;
       a.right = &c;
       b.left = &d;
       b.right = &e;
       c.right = &f;
       preorder_print(&a, 0);
       return 0;
}

 

例一:LeetCode113

//给定一个二叉树与整数sum,找出所有从根节点到叶节点的路径,这些路径上累加值为sum
#include <stdio.h>
#include <vector>
struct TreeNode {
       int val;
       TreeNode* left;
       TreeNode* right;
       TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
       std::vector<std::vector<int>> pathSum(TreeNode* root, int sum) {
              std::vector<std::vector<int>> result;
              std::vector<int> path;
              int path_value = 0;
              preorder(root, path_value, sum, path, result);
              return result;
       }
private:
       void preorder(TreeNode* node, int& path_value, int sum, std::vector<int>& path, std::vector<std::vector<int>>& result) {
              if (!node) {
                     return;
              }
              path_value += node->val;
              path.push_back(node->val);
              if (!node->left && !node->right && path_value == sum) {
                     result.push_back(path);
              }
              preorder(node->left, path_value, sum, path, result);
              preorder(node->right, path_value, sum, path, result);
              path_value -= node->val;
              path.pop_back();
       }
};
int main() {
       TreeNode a(5);
       TreeNode b(4);
       TreeNode c(8);
       TreeNode d(11);
       TreeNode e(13);
       TreeNode f(4);
       TreeNode g(7);
       TreeNode h(2);
       TreeNode x(5);
       TreeNode y(1);
       a.left = &b;
       a.right = &c;
       b.left = &d;
       c.left = &e;
       c.right = &f;
       d.left = &g;
       d.left = &h;
       f.left = &x;
       f.right = &y;
       Solution solve;
       std::vector<std::vector<int>> result = solve.pathSum(&a, 22);
       for (int i = 0; i < result.size(); i++) {
              for (int j = 0; j < result[i].size(); j++) {
                     printf("[%d]", result[i][j]);
              }
              printf("\n");
       }
       return 0;
}

例二:LeetCode236

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值