题目
在二叉查找树中插入节点
给定一棵二叉查找树和一个新的树节点,将节点插入到树中。
你需要保证该树仍然是一棵二叉查找树。
样例
给出如下一棵二叉查找树,在插入节点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
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; } };
时间: 2024-10-03 15:01:32