【二叉搜索树插入新的节点】【二叉搜索树】Leetcode 701. 二叉搜索树中的插入操作
- 关键点:
- 解法 递归法
- 解法 迭代法
---------------🎈🎈题目链接🎈🎈-------------------
关键点:
关键点:
二叉搜索树插入新的节点,其实就是把这个节点插入到对应的叶子结点
比如插入5: 5比4小,向右遍历到7 。5比7小,向左遍历为null,就插入在这里。
解法 递归法
时间复杂度O(N)
空间复杂度O(N)
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {// 递归if(root == null) {TreeNode addnode = new TreeNode(val);return addnode;} if(val < root.val){ // 向左递归遍历root.left = insertIntoBST(root.left,val);} else{ // 向右递归遍历root.right = insertIntoBST(root.right,val);}return root;}
}
解法 迭代法
时间复杂度O(N)
空间复杂度O(N)
class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {TreeNode addroot = new TreeNode(val);TreeNode newroot = root;if(root == null) return addroot;while(newroot!=null){if(val<newroot.val){ // 如果val<newroot.val,就向左找叶子结点if(newroot.left!=null){ //不为叶子结点,就继续遍历newroot = newroot.left;}else{ //为叶子结点,插入并输出newroot.left = addroot;break;}} else{ // 如果val>newroot.val,就向右找叶子结点if(newroot.right!=null){ //不为叶子结点,就继续遍历newroot = newroot.right;}else{ //为叶子结点,插入并输出newroot.right = addroot;break;}}}return root;}
}