思路:
可以讲此题看为有序数组去理解:将数组从后往前不断累加;
又因为这是一棵平衡二叉树所以是有序的,若想从后向前由大到小累加,则需要逆中序遍历(右中左,普通后续遍历是:左中右);
需要pre全局变量,来记录之前元素之和;需要cur局部变量指向当前遍历元素;
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
self.pre = 0
self.traversal(root)
return root
def traversal(self, cur: Optional[TreeNode]):
if not cur: return
self.traversal(cur.right)
cur.val += self.pre
self.pre = cur.val
self.traversal(cur.left)
引用:
二叉树知识点总结:
二叉树知识点思维导图: