0 课程地址
https://coding.imooc.com/lesson/207.html#mid=14349
1 重点关注
1.1 二分搜索树的性质 代码草图
1.2 破坏二分搜索树的四种情况
1.3 左左情况解析
1.4 左左情况解决:右旋转(图中应该是右旋转)
2 课程内容
3 Coding
3.1 coding
案例:傲慢与偏见 统计单词
关键代码
//3 递归,添加元素 public void add(K key,V value,Node root){ //3.1 终止条件 //3.1.1 要插入的元素和二叉树原有节点相同,这个不用判断,因为已经调了containsKey方法判断了 /*if(key.equals(root.e)){ return; }*/ //3.1.2 最终插入左孩子 if(key.compareTo(root.key)<0 && root.left==null){ root.left = new Node(key,value); size++; return; } //3.1.2 最终插入右孩子 if(key.compareTo(root.key)>0 && root.right == null){ root.right = new Node(key,value); size++; return; } //3.2 递归 //3.2.1 递归左孩子 if(key.compareTo(root.key)<0){ add(key,value,root.left); } //3.2.2 递归右孩子 if(key.compareTo(root.key)>0){ add(key,value,root.right); } root.height = 1+Math.max(getHeight(root.left),getHeight(root.right)); int balanceFactor = getBalanceFactor(root); if(Math.abs(balanceFactor)>1){ System.out.println("unbalanced:"+balanceFactor); } //左左情况 if(balanceFactor>1&&getBalanceFactor(root.left)>=0){ } }
诸葛