二叉搜索树的插入
题目描述
力扣链接🔗

代码思路
根据二叉树的性质,进行搜索,由于插入在叶子节点,搜索到最后进行插入。
有返回值的递归
有返回值的递归,在添加时可以直接进行返回,最后会递归到root。
/*** 有返回值的递归法** @param root* @param val* @return*/public TreeNode insertIntoBST(TreeNode root, int val) {if (root == null) { // 当节点为空时,此时就该赋值了TreeNode treeNode = new TreeNode(val);return treeNode;}if (root.val > val) {root.left = insertIntoBST(root.left, val);} else {root.right = insertIntoBST(root.right, val);}return root;}
无返回值的递归
无返回值递归需要记录上一次的节点,在进行添加。(因为不像有返回值递归可以直接返回到根节点)
/*** 无返回值的递归法** @param root* @param val* @return*/public TreeNode insertIntoBST(TreeNode root, int val) {if (root == null) {return new TreeNode(val);}traversal(root, val);return root;}TreeNode parent; // 用来记录上一个节点public void traversal(TreeNode cur, int val) {if (cur == null) { // 当到达最后时,需要用上一个节点来赋值TreeNode node = new TreeNode(val);if (parent.val > val) {parent.left = node;} else {parent.right = node;}return;}parent = cur;if (cur.val > val) traversal(cur.left, val);if (cur.val < val) traversal(cur.right, val);return;}
迭代法
迭代法也需要记录上一次的节点,在进行添加。
/*** 迭代法** @param root* @param val* @return*/public TreeNode insertIntoBST(TreeNode root, int val) {if (root == null) {return new TreeNode(val);}TreeNode cur = root;// 记录上一个节点进行赋值TreeNode parent = root;while (cur != null) {parent = cur; // 需要放在最前面,最后一轮时,在最底层if (cur.val > val) {cur = cur.left;} else {cur = cur.right;}}if (parent.val > val) {parent.left = new TreeNode(val);} else {parent.right = new TreeNode(val);}return root;}
