程序员面试的那些小事架构算法设计模式和编程理论程序员

lintcode 在二叉查找树中插入节点

2017-01-16  本文已影响45人  yzawyx0220

给定一棵二叉查找树和一个新的树节点,将节点插入到树中。
你需要保证该树仍然是一棵二叉查找树。
样例
给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的:

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

题目链接:http://www.lintcode.com/zh-cn/problem/insert-node-in-a-binary-search-tree/
二叉查找树的特点:根结点比它的左子树都大,比它的右子树都小,给出递归和非递归两种方法
递归:

/**
 * 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
        if (!root) return node;
        else if (node->val > root->val) root->right = insertNode(root->right,node);
        else root->left = insertNode(root->left,node);
        return root;
    }
};

非递归:

/**
 * 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
        if (root == NULL) return node;
        TreeNode * head = root;
        while (root) {
            if (node->val < root->val) {
                if (!root->left) {
                    root->left = node;
                    return head;
                }
                root = root->left;
            }
            else {
                if (!root->right) {
                    root->right = node;
                    return head;
                }
                root = root->right;
            }
        }
        return head;
    }
};
上一篇下一篇

猜你喜欢

热点阅读