二叉搜索树转化为更大的树:给定一棵二叉搜索树,将它转化为更大的二叉树,规则是:结点的值 = 该结点的值 + 所有比它大的结点的值的和。 转化后,二叉树变成左边大,右边小,刚好和二叉搜索树相反。
对二叉搜索树中序遍历,设置一个数组,保存中序遍历的值,得到从小到大排序的nums 对二叉搜索树再次进行中序遍历,将遍历结点的值 加上所有大于它的值。 注意//538. Convert BST to Greater Tree TreeNode* convertBST(TreeNode* root) { vectornums = getMidorderNums(root); reverse(nums.begin(), nums.end()); TreeNode* t = root; stack s; if (!t) { printf("the tree is empty\n"); } else { while (t || !s.empty()) { while (t) { s.push(t); t = t->left; } t = s.top(); s.pop(); for (int i = 0; i val += nums[i]; } nums.pop_back(); t = t->right; } } return root; } // 保存中序遍历的值 vector getMidorderNums(TreeNode* root) { vector nums; if (root == nullptr) return nums; vector nums_l = getMidorderNums(root->left); nums = nums_l; nums.push_back(root->val); vector nums_r = getMidorderNums(root->right); nums.insert(nums.end(), nums_r.begin(), nums_r.end()); return nums; }