VCS+Verdi仿真实录:手把手调试FPGA与PSRAM(APS6408L)的AXI接口时序,附波形分析避坑指南
2026/6/2 4:39:37
输入:二叉搜索树根节点root(节点值各不相同)。
要求:将其转换为累加树(Greater Sum Tree):
每个节点的新值 = 原树中所有大于等于该节点值的节点值之和。
输出:转换后的树根节点TreeNode*(原地修改后返回root)。
思路:
BST 的中序遍历(左-根-右)是递增序列。
那我们如果想做“后缀和”(从大到小累加),就把遍历方向反过来:
逆向中序遍历:右 -> 根 -> 左
访问顺序从大到小,维护一个滚动累加sum。
遍历到某个节点时:
sum += node->valnode->val = sum(把当前节点改成“>= 自己的总和”)补充:
也能用“两次正序中序”做:第一次中序存有序数组并做后缀和映射,第二次再中序回填。
但那是 O(N) 额外空间;本题一趟逆向中序就能原地搞定。
复杂度:
classSolution{public:TreeNode*convertBST(TreeNode*root){sum=0;reverseInorder(root);returnroot;}private:intsum;voidreverseInorder(TreeNode*node){if(node==nullptr)return;reverseInorder(node->right);sum+=node->val;node->val=sum;reverseInorder(node->left);}};