网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
TreeNode A = new TreeNode('A');
TreeNode B = new TreeNode('B');
TreeNode C = new TreeNode('C');
TreeNode D = new TreeNode('D');
TreeNode E = new TreeNode('E');
TreeNode F = new TreeNode('F');
TreeNode G = new TreeNode('G');
TreeNode H = new TreeNode('H');
A.left = B;
A.right = C;
B.left = D;
B.right = E;
C.left = F;
C.right = G;
E.right = H;
return A;
}
**3、三种遍历方式的实现**
public void preOrder(TreeNode root){//前序遍历
if(root == null){
return;
}
System.out.print(root.val+" ");
preOrder(root.left);
preOrder(root.right);
}
public void inOrder(TreeNode root){//中序遍历
if(root == null){
return;
}
preOrder(root.left);
System.out.print(root.val+" ");
inOrder(root.right);
}
public void postOrder(TreeNode root){//后序遍历
if(root == null){
return;
}
preOrder(root.left);
inOrder(root.right);
System.out.print(root.val+" ");
}
**运行结果:**
![da208c16bceb4f93a4bf61557a3b525a.png](https://img-blog.csdnimg.cn/da208c16bceb4f93a4bf61557a3b525a.png)
**4、获取树中节点的个数(2种方法)**
// 获取树中节点的个数 两种方法
public static int nodeSize = 0;
public int size(TreeNode root) {
if(root == null) {
return 0;
}
nodeSize++;
size(root.left);
size(root.right);
return nodeSize;
}
public int size2(TreeNode root) {
if(root == null) {
return 0;
}
int tmp = size2(root.left)+size2(root.right)+1;
return tmp;
}
**运行结果:**
![0b416e75beaf433f9a0769b2276ee94f.png](https://img-blog.csdnimg.cn/0b416e75beaf433f9a0769b2276ee94f.png)
**5、获取叶子节点的个数(两种方法)**
int getLeafNodeCount(TreeNode root) {
if(root == null) {
return 0;
}
if(root.left == null && root.right == null) {
return 1;
}
int tmp = getLeafNodeCount(root.left) +
getLeafNodeCount(root.right);
return tmp;
}
public static int leafSize = 0;
void getLeafNodeCount2(TreeNode root) {
if(root == null) {
return ;
}
if(root.left == null && root.right == null) {
leafSize++;
}
getLeafNodeCount2(root.left);
getLeafNodeCount2(root.right);
}
**运行结果:**
![ea6885fb46014158aeda07d398fa77e5.png](https://img-blog.csdnimg.cn/ea6885fb46014158aeda07d398fa77e5.png)
**6、判断第K层节点的个数**
int getKLevelNodeCount(TreeNode root,int k) {
if(root == null || k <= 0) {
return 0;
}
if(k == 1) {
return 1;
}
int tmp = getKLevelNodeCount(root.left,k-1) +
getKLevelNodeCount(root.right,k-1);
return tmp;
}
**运行结果:(这里我们求的是第3层的结果)**
![cb691638394945359feb66e48de7eea3.png](https://img-blog.csdnimg.cn/cb691638394945359feb66e48de7eea3.png)
**7、获取二叉树的高度**
// 时间复杂度:O(n)
public int getHeight(TreeNode root) {
if(root == null) {
return 0;
}
int leftHeight = getHeight(root.left);
int rightHeight = getHeight(root.right);
return leftHeight > rightHeight ? leftHeight+1 : rightHeight+1;
}
// 时间复杂度:O(n)
public int getHeight2(TreeNode root) {
if(root == null) {
return 0;
}
return getHeight2(root.left) > getHeight2(root.right)
? getHeight2(root.left)+1 : getHeight2(root.right)+1;
}
**运行结果:**
![52a134043b89438fa958d93eccac7f52.png](https://img-blog.csdnimg.cn/52a134043b89438fa958d93eccac7f52.png)
**8、检测值为val的元素是否存在**
public TreeNode find(TreeNode root, char val) {
if(root == null) {
return null;
}
if(root.val == val) {
return root;
}
TreeNode ret1 = find(root.left,val);
if(ret1 != null) {
return ret1;
}
TreeNode ret2 = find(root.right,val);
if(ret2 != null) {
return ret2;
}
return null;
}
//时间复杂度:O(min(M,N)) P:M Q:N
public boolean isSameTree(TreeNode p, TreeNode q) {
if(p == null && q != null || p != null && q == null ) {
return false;
}
if(p == null && q == null) {
return true;
}
if(p.val != q.val) {
return false;
}
return isSameTree(p.left,q.left) && isSameTree(p.right,q.right);
}
**运行结果:(这里我们检测字符H是否在节点中)**
![133a840a71294b1f810878be1adef06f.png](https://img-blog.csdnimg.cn/133a840a71294b1f810878be1adef06f.png)
🥧🥧OK,那么二叉树的中篇就讲到这里,下篇博主将会整合二叉树的面试OJ题,期待你的阅读,一键三连!🤟🤟
![img](https://img-blog.csdnimg.cn/img_convert/4097eb18265f3eb23fb88978a6bae2f9.png)
![img](https://img-blog.csdnimg.cn/img_convert/b9707d79bad5a19d832bcf4c20e71117.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
800590217)]
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**