0
点赞
收藏
分享

微信扫一扫

5.1.7复原二叉搜索树


文章目录

  • ​​1.题目​​
  • ​​2.代码​​

1.题目

  • ​​题目要求​​
  • eg:

Input: [3,1,4,null,null,2]

3
/ \
1 4
/
2

Output: [2,1,4,null,null,3]

2
/ \
1 4
/
3

  • 思路:
    结果数组是中序遍历的结果,这道题要求我们复原一个二叉搜索树,说是其中有两个的顺序被调换了,题目要求上说 O(n) 的解法很直观,这种解法需要用到递归,用中序遍历树,并将所有节点存到一个一维向量中,把所有节点值存到另一个一维向量中,然后对存节点值的一维向量排序,在将排好的数组按顺序赋给节点。

2.代码

复杂问题直接使用递归
class Solution{
public:
void recoverTree(TreeNode* root)
{
vector<TreeNode*> all_node;
vector<int> all_node_val;
inorder(all_node, all_node_val, root);
sort(all_node_val.begin(),all_node_val.end());
for (int i=0;i<all_node.size();++i)
all_node[i]->val=all_node_val[i];
}
void inorder(vector<TreeNode*>& all_node, vector<int> all_node_val, TreeNode* root)
{
if (!root) return;
inorder(all_node,all_node_val,root->left);
all_node.push_back(root);
all_node_val.push_back(root->val);
inorder(all_node,all_node_val,root->right);
}
};


举报

相关推荐

0 条评论