最全【数据结构与算法】初识二叉树(中)_treenode(1),一个三非渣本的大数据开发校招秋招之路

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值