Leetcode538. 把二叉搜刮树转换为累加树(HOT100)

打印 上一主题 下一主题

主题 874|帖子 874|积分 2622

链接
我的正确代码:
  1. class Solution {
  2. public:
  3.     int curSum = 0;
  4.     TreeNode* convertBST(TreeNode* root) {
  5.         if (!root)
  6.             return nullptr;
  7.         order(root);
  8.         return root;
  9.     }
  10.     void order(TreeNode* root) {
  11.         if (!root)
  12.             return;
  13.         order(root->right);
  14.         curSum += root->val;
  15.         root->val = curSum;
  16.         order(root->left);
  17.     }
  18. };
复制代码
首先:
对于一个递增数组而言,要将每个元素置为大于等于它的元素之和,那么我们从右往左遍历,维护后缀和即可。
而对于二叉搜刮树,有一个性质:中序遍历是递增的,那么反向中序遍历就是递减的。
以是我们反向中序遍历即可。
代码:
 
  1. class Solution {
  2. public:
  3.     int curSum = 0;
  4.     TreeNode* convertBST(TreeNode* root) {
  5.         dfs(root);
  6.         return root;
  7.     }
  8.     void dfs(TreeNode* root){
  9.         if(!root)
  10.             return;
  11.         dfs(root->right);
  12.         curSum+=root->val;
  13.         root->val = curSum;
  14.         dfs(root->left);
  15.     }
  16. };
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表