JZ049从根节点到叶子节点的数字之和
2022-05-19 21:55
489 查看
title: 从根节点到叶子节点的数字之和
📃 题目描述
题目链接:从根节点到叶子节点的数字之和、相同题目
🔔 解题思路
方法一:递归回溯,主要判断好:当前结点传什么值进来,我传入的是上一个节点加入节点值后扩大十倍;
class Solution { public: int res = 0; int sumNumbers(TreeNode* root) { backTracking(root, 0); return res; } void backTracking(TreeNode *root, int num) { if (!root->left && !root->right) { res += (num + root->val); return; } num = (num + root->val) * 10;//传入扩大十倍的值; if (root->left) { backTracking(root->left, num); } if (root->right) { backTracking(root->right, num); } } };
方法二:迭代深度优先(用栈),一个栈保存节点,另一个栈保存到当前节点的路径值,比如前面经过数值1,经过数值2,才到当前节点数值4,那么当前节点的路径值为124;
当然也可以用广度优先搜索(有队列)
class Solution { public: int sumNumbers(TreeNode* root) { stack<TreeNode*> treeSt;//保存节点指针 stack<int> sumSt; //保存节点的路径值 treeSt.push(root); sumSt.push(root->val); int res = 0; while (!treeSt.empty()) { TreeNode *cur = treeSt.top(); treeSt.pop(); int nodeSum = sumSt.top(); sumSt.pop(); if (!cur->left && !cur->right) { res += nodeSum; } if (cur->left) { treeSt.push(cur->left); sumSt.push(nodeSum * 10 + cur->left->val); } if (cur->right) { treeSt.push(cur->right); sumSt.push(nodeSum * 10 + cur->right->val); } } return res; } };
💥 复杂度分析
- 时间复杂度:o(n);
- 空间复杂度:O(n);
相关文章推荐
- leetcode129. 求根到叶子节点数字之和(dfs)
- 如何使用C++递归来实现在BST(Binary Search Tree)里将所有的叶子节点上的数字求和
- 【LeetCode-cpp】【50】129. 中等 求根到叶子节点数字之和 Sum Root to Leaf Numbers
- 求二叉树叶子节点的个数/求二叉树第k层的节点个数/一个数组中有一个数字的次数超过了数组的一半,求出这个字符
- 四叉树通常用来以紧凑的形式对数字图像进行编码(1.根据叶子节点构造四叉树 2.根据四叉树结构对加密图像进行解码 3.输出解码后的图像信息 )
- LeetCode 129. 求根到叶子节点数字之和
- 129. 求根到叶子节点数字之和
- [LeetCode 129] - 根节点到叶子节点数字求和(Sum Root to Leaf Numbers)
- 二叉树的叶子节点、第K层节点/数组中数字次数超过数组长度的一般
- 求二叉树从叶子到根节点的值组成数字的和
- 利用python 完成 leetcode 129 求根到叶子节点数字之和
- 二叉树的每个节点为0-9的一个数字,根到叶子的一条路径拼成一个数,求所有路径形成的数字和
- 【leetcode系列】129. 求根到叶子节点数字之和
- C++Leetcode129:求根到叶子节点数字之和
- 先序遍历建立二叉树,求保存最大数字的叶子节点到最小数字的叶子结点的距离 2016网易编程题
- 求二叉树从根节点到每个叶子节点路径上不重复数字的最大个数
- day10之求二叉树叶子节点的个数+求二叉树第k层的节点个数+数组中超过一半的数字
- (LeetCode 129)求根到叶子节点数字之和 [简单DFS ]
- 求根到叶子节点数字之和
- 利用QtQuick 2.0(qml)实现叶子节点可以拖动的强大的树形结构