web前端项目开发如何设计整体架构方案,LeetCode - Medium - 222,不服不行

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/

}

}

Test


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前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

最后

你要问前端开发难不难,我就得说计算机领域里常说的一句话,这句话就是『难的不会,会的不难』,对于不熟悉某领域技术的人来说,因为不了解所以产生神秘感,神秘感就会让人感觉很难,也就是『难的不会』;当学会这项技术之后,知道什么什么技术能做到什么做不到,只是做起来花多少时间的问题而已,没啥难的,所以就是『会的不难』。

我特地针对初学者整理一套前端学习资料

前端路线图

vue.js的36个技巧

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

IA6JV2-1712461831385)]

[外链图片转存中…(img-OiMWL16L-1712461831385)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-xNrizMhS-1712461831385)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值