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

来源:互联网 发布:淘宝网怎么绑定信用卡 编辑:程序博客网 时间:2024/06/05 07:25

题目

 在二叉查找树中插入节点

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

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

样例

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

  2             2 / \           / \1   4   -->   1   4   /             / \   3             3   6

分析

递归和非递归两种方法实现。

Python代码

"""Definition of TreeNode:class TreeNode:    def __init__(self, val):        self.val = val        self.left, self.right = None, None"""class Solution:    """    @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.    """    def insertNode1(self, root, node):        # write your code here        if root is None:            root = node            return root        if node.val < root.val:            root.left = self.insertNode1(root.left, node)        else:            root.right = self.insertNode1(root.left, node)        return root    def insertNode(self, root, node):        # write your code here        if root is None:            root = node            return root        t = root        while t is not None:            if node.val < t.val:                if t.left is None:                    t.left = node                    return root                else:                    t = t.left                    continue            else:                if t.right is None:                    t.right = node                    return root                else:                    t = t.right                    continue        return root

GitHub -- Python代码

C++代码

/** * 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* insertNode1(TreeNode* root, TreeNode* node) {        // write your code here        if(root == NULL)        {            root = node;            return root;        }//if                if(node->val < root->val)        {            if(root->left == NULL)            {                root->left = node;            }else{                root->left = insertNode1(root->left, node);            }//else        }else{            if(root->right == NULL)            {                root->right = node;            }else{                root->right = insertNode1(root->right, node);            }//else        }//else                return root;    }        //非递归     TreeNode* insertNode(TreeNode* root, TreeNode* node) {        // write your code here        if(root == NULL)        {            root = node;            return root;        }//if                TreeNode *t = root;        while(t != NULL)        {            if(node->val < t->val)            {                                if(t->left == NULL)                {                    t->left = node;                    return root;                }else{                    t = t->left;;                    continue;                }//else            }//if            else{                if(t->right == NULL)                {                    t->right = node;                    return root;                }else{                    t = t->right;                    continue;                }//else            }//else        }//while        return root;     }};

GitHub -- C++代码

1 0
原创粉丝点击