701_二叉搜索树中的插入操作
701_二叉搜索树中的插入操作
package 二叉树.二叉搜索树; /** * https://leetcode-cn.com/problems/insert-into-a-binary-search-tree/ * @author Huangyujun * */ public class _701_二叉搜索树中的插入操作 { //递归实现: //结果时空的??? //修改后,返回结果也不对,看看大佬的代码(就是递归函数有返回,含义没搞清楚) // public TreeNode insertIntoBST(TreeNode root, int val) { // //使用递归 // if(root == null) return new TreeNode(val); // if(root.val == val) return root; // return (val > root.val) ? insertIntoBST(root.right, val) : insertIntoBST(root.left, val); // } //看到没:① root.left = insertIntoBST(root.left, val); // ② root.right = insertIntoBST(root.right, val); //题目接口含义:向一棵树插入一个结点,并返回树的根 // insertIntoBST(root.left, val); 相应的:向左子树插入结点,返回的就是一颗左子树啦 //启发:读懂 接口含义(使用递归时,要相应的套上含义) public TreeNode insertIntoBST(TreeNode root, int val) { if (root == null) { return new TreeNode(val); } if (val < root.val) { root.left = insertIntoBST(root.left, val); } else { root.right = insertIntoBST(root.right, val); } return root; } //迭代实现:①一开始:root == null; 创建一个结点(值即传入的val),然后返回给结点。 //② 若值= 根值,重复了,直接return //③ 从根开始不断地遍历【需要记录一下父节点,以便跟插入结点构成联系】:(若值 > 父结点值【切换到右区域】),否者切换到左区域。直到找到一个 null的空地来建立结点: //④ 判断父结点: //● 没有左、右结点(判断一下父结点值和传入的值,从而得知插入是左还是右结点) //● 有左结点,直接插入在右结点位置 //● 最后, 则插入在左结点位置 public TreeNode insertIntoBST2(TreeNode root, int val) { if(root == null) { //原来是一颗空树 TreeNode newRoot = new TreeNode(val); return newRoot; } if(root.val == val) return root; //遍历树,找找找,找到一个空的位置(newNode) TreeNode node = root; TreeNode parentNode = null; while(node != null) { parentNode = node; if(node.val > val) { //当前值比较小了,往左区间 node = node.left; }else if(node.val < val) { node = node.right; }else { return root; } } //这种情况是node 到达空啦 TreeNode newNode = new TreeNode(val); //需要判断父结点是否有孩子 if(parentNode.left == null && parentNode.right == null) { //左右孩子都没有 //判断当前值大小 if(val > parentNode.val) { parentNode.right = newNode; }else { parentNode.left = newNode; } }else if(parentNode.left != null) { //有左孩子 parentNode.right = newNode; }else { parentNode.left = newNode; } return root; } }
本文来自博客园,作者:一乐乐,转载请注明原文链接:https://www.cnblogs.com/shan333/p/15709286.html