Leetcode_897. Increasing Order Search Tree
题目:https://leetcode.com/problems/increasing-order-search-tree/
题意:
将一棵二叉搜索树,重排为一棵递增的二叉排序树。
解法1:
rson->root->left的顺序依次遍历整棵树,途中使用头插法建立链表(递增的二叉搜索树)。
这样做会带来额外的内存开销。
class Solution { public: TreeNode* result=NULL; TreeNode* increasingBST(TreeNode* root) { reverse_postorder(root); return result; } void reverse_postorder(TreeNode* root) { if(root==nullptr) return; reverse_postorder(root->right); TreeNode* node=new TreeNode(root->val); node->right=result; result=node; reverse_postorder(root->left); } };
解法2:
先序遍历树,途中调整指针的指向。
successor:以当前root为根节点的子树,在整棵树的先序表示中的后继。
在先序表示中,
任意节点(node),是以该节点左孩子(node->left)为根节点的子树的后继;
任意节点(node)的父节点,是以该节点的右孩子(node->right)为根节点的子树的后继;
class Solution { public: TreeNode* increasingBST(TreeNode* root, TreeNode* successor=nullptr) { if(root==nullptr) return successor; TreeNode* res=increasingBST(root->left, root); root->left=nullptr; root->right=increasingBST(root->right, successor); return res; } };