在二叉查找树中插入节点

来源:互联网 发布:js网页编程 编辑:程序博客网 时间:2024/06/05 11:37

题目:

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

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

样例:

给出如下一棵二叉查找树,在插入节点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
        if(root==NULL) return node;
        else if(root->val>node->val) root->left=insertNode(root->left,node);
          else root->right=insertNode(root->right,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
        TreeNode* root1=root;
        TreeNode* root2=root;
        if(root!=NULL){
           while(root!=NULL){
            if(node->val>root->val){root2=root;root=root->right;}
            else if(node->val<root->val){root2=root;root=root->left;}
            }
            if(root2->val>node->val) root2->left=node;
            else if(root2->val<node->val)root2->right=node;
            return root1;
        }
       
        else  return node;
       
        
    }
};

感想:

通过此题更加熟悉了二叉排序树的性质。

0 0
原创粉丝点击