美文网首页
LintCode 691. BST Swapped Nodes

LintCode 691. BST Swapped Nodes

作者: Andiedie | 来源:发表于2017-10-26 21:22 被阅读0次

    原题

    LintCode 691. BST Swapped Nodes

    Description

    In a binary search tree, (Only) two nodes are swapped. Find out these nodes and swap them. If there no node swapped, return original root of tree.

    Example

    Given a binary search tree:

        4
       / \
      5   2
     / \
    1   3
    

    return

        4
       / \
      2   5
     / \
    1   3
    

    解题

    题意是一棵二叉搜索树有两个节点被交换了,找到这两个节点,换回来。

    思路:中序遍历二叉树,本来应该得到一个正序的数组,但是其中有两个数字的顺序是错误的。直接交换这两个数字就行了。

    代码

    class Solution {
    public:
        /*
        * @param : the given tree
        * @return: the tree after swapping
        */
        TreeNode * bstSwappedNode(TreeNode * root) {
            helper(root);
            vector<TreeNode*> v;
            for (int i = 0; i < vec.size(); i++) {
                if (i > 0) {
                    if (vec[i].first < vec[i - 1].first) {
                        v.push_back(vec[i].second);
                    }
                }
                if (i < vec.size() - 1) {
                    if (vec[i].first > vec[i + 1].first) {
                        v.push_back(vec[i].second);
                    }
                }
            }
            if (v.size())
                swap(v.front()->val, v.back()->val);
            return root;
        }
    private:
        vector<pair<int, TreeNode*>> vec;
        void helper(TreeNode * root) {
            if (!root) return;
            helper(root->left);
            vec.push_back({ root->val, root });
            helper(root->right);
        }
    };
    

    相关文章

      网友评论

          本文标题:LintCode 691. BST Swapped Nodes

          本文链接:https://www.haomeiwen.com/subject/bfklpxtx.html