nodes += 1 << h;
root = root.right;
} else {
nodes += 1 << h - 1;
root = root.left;
}
h–;
}
return nodes;
}
//方法四:
public int countNodes4(TreeNode root) {
if (root == null)
return 0;
TreeNode left = root, right = root;
int height = 0;
while (right != null) {
left = left.left;
right = right.right;
height++;
}
if (left == null)
return (1 << height) - 1;
return 1 + countNodes(root.left) + countNodes(root.right);
}
//方法五:方法一的对称写法形式
public int countNodes5(TreeNode root) {
if (root == null)
return 0;
int lh = height2(root.left);
int rh = height2(root.right);
if(lh == rh)
return (1 << lh) + countNodes5(root.right); /*1(根节点) + (1<<lh)-1(完全左子树) + # of rightNode */
else
return (1 << rh) + countNodes5(root.left); /1(根节点) + (1<<rh)-1(完全右子树) + # of leftNode/
}
}
import static org.junit.Assert.*;
import org.junit.Test;
import com.lun.util.BinaryTree;
public class CountCompleteTreeNodesTest {
@Test
public void test() {
CountCompleteTreeNodes obj = new CountCompleteTreeNodes();
assertEquals(6, obj.countNodes(BinaryTree.integers2BinaryTree(1, 2, 3, 4, 5, 6)));
assertEquals(1, obj.countNodes(BinaryTree.integers2BinaryTree(1)));
assertEquals(0, obj.countNodes(null));
}
@Test
public void test2() {
CountCompleteTreeNodes obj = new CountCompleteTreeNodes();
assertEquals(6, obj.countNodes2(BinaryTree.integers2BinaryTree(1, 2, 3, 4, 5, 6)));
assertEquals(1, obj.countNodes2(BinaryTree.integers2BinaryTree(1)));
assertEquals(0, obj.countNodes2(null));
}
@Test
public void test3() {
CountCompleteTreeNodes obj = new CountCompleteTreeNodes();
assertEquals(6, obj.countNodes3(BinaryTree.integers2BinaryTree(1, 2, 3, 4, 5, 6)));
assertEquals(1, obj.countNodes3(BinaryTree.integers2BinaryTree(1)));
assertEquals(0, obj.countNodes3(null));
}
@Test
public void test4() {
CountCompleteTreeNodes obj = new CountCompleteTreeNodes();
assertEquals(6, obj.countNodes4(BinaryTree.integers2BinaryTree(1, 2, 3, 4, 5, 6)));
assertEquals(1, obj.countNodes4(BinaryTree.integers2BinaryTree(1)));
assertEquals(0, obj.countNodes4(null));
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
最后
你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。
我特地针对初学者整理一套前端学习资料
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
IA6JV2-1712461831385)]
[外链图片转存中…(img-OiMWL16L-1712461831385)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-xNrizMhS-1712461831385)]