LintCode 85. 在二叉查找树中插入节点

来源:互联网 发布:数据透视表 总计图标 编辑:程序博客网 时间:2024/06/15 17:37

题目: 在二叉查找树中插入节点


要求:

给定一棵二叉查找树和一个新的树节点,将节点插入到树中。

你需要保证该树仍然是一棵二叉查找树。

样例:

给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的:

给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的:  2             2 / \           / \1   4   -->   1   4   /             / \   3             3   6

算法要求:

能否不使用递归?

解题思路:

直接用栈来实现即可。

算法如下:

/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode(int val) { *         this->val = val; *         this->left = this->right = NULL; *     } * } */class Solution {public:    /*     * @param root: The root of the binary search tree.     * @param node: insert this node into the binary search tree     * @return: The root of the new binary search tree.     */    TreeNode * insertNode(TreeNode * root, TreeNode * node) {        // write your code here        stack<TreeNode * > sta;        sta.push(root);        TreeNode * last = NULL;        while (sta.size() != 0) {            TreeNode * now = sta.top();            sta.pop();            if (now == NULL) {                if (last == NULL) {                    root = node;                } else if (last->val <= node->val) {                    last -> right = node;                } else {                    last -> left = node;                }                break;            } else if (now->val <= node->val) {                sta.push(now->right);            } else {                sta.push(now->left);            }            last = now;        }        return root;    }};
原创粉丝点击