Leetcode 538. 把二叉搜索树转换为累加树

给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree),使得每个节点的值是原来的节点值加上所有大于它的节点值之和。

例如:

输入: 二叉搜索树:
              5
            /   \
           2     13

输出: 转换为累加树:
             18
            /   \
          20     13

首先讲讲思路:

1.对于一个点的右子树,需要将其自身、其所有的右节点、和一个比它大的家伙XXX给加上。

2.前面两个加数都好理解,那么什么叫做比它大的家伙XXX。其实就是,若你是某个节点的左节点,那么这个XXX就是你的根节点,那么我要是右节点呢?那么就往上找,看有没有一个根节点是其父节点的左子树。

下面原代收奉上:

AC解 

class Solution {
public:
	TreeNode * convertBST(TreeNode* root) {
		if (root == NULL)
			return NULL;
		convertBST_(root,0);
		return root;
	}

	void convertBST_(TreeNode* root,int Last_Root)
	{
		if (root == NULL)
			return;
		root->val = (root->val) + Add_all(root->right) + Last_Root;
		convertBST_(root->left, root->val);
		convertBST_(root->right, Last_Root);
	}

	int Add_all(TreeNode* root)
	{
			if (root == NULL)
				return 0;
			int Res = (Add_all(root->right) + Add_all(root->left)+root->val);
			return Res;
	}
};

猜你喜欢

转载自blog.csdn.net/liaoxuda_edu/article/details/81505671