实现二叉树的基本操作

博主主页: 码农派大星.

关注博主带你了解更多数据结构知识

1我们先来模拟创建一个二叉树

public class TestBinaryTreee {static class TreeNode{public char val;public  TreeNode left;public  TreeNode right;public TreeNode(char val) {this.val = val;}}public TreeNode creatTree(){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;//就是根节点}
}

2分别实现它的前中后序遍历

1前序遍历

// 前序遍历void preOrder(TreeNode root){if (root == null){return;}System.out.print(root.val+" ");//递归遍历左子树preOrder(root.left);//第归遍历右子树preOrder(root.right );}
 TestBinaryTreee testBinaryTreee = new TestBinaryTreee();testBinaryTreee.creatTree();TestBinaryTreee.TreeNode root = testBinaryTreee.creatTree();testBinaryTreee.preOrder(root);System.out.println();

2中序遍历

// 中序遍历void inOrder(TreeNode root){if (root == null){return;}inOrder(root.left);System.out.print(root.val+" ");inOrder(root.right);}
 testBinaryTreee.inOrder(root);System.out.println();

3后序遍历

// 后序遍历void postOrder(TreeNode root){if (root == null){return;}inOrder(root.left);inOrder(root.right);System.out.print(root.val+" ");}
testBinaryTreee.postOrder(root);System.out.println();

3 获取树中节点的个数

 //求有多少个节点
1:public int size(TreeNode root){if (root == null){return 0;}int ret = size(root.left)+size(root.right)+1;return ret;}
2:public static int nodeSize;public void size2(TreeNode root){if (root == null){return ;}nodeSize++;size2(root.left);size2(root.right);}
 System.out.println(testBinaryTreee.size(root));testBinaryTreee.size2(root);System.out.println(TestBinaryTreee.nodeSize);

4获取叶子节点的个数

//求叶子结点个数
1:public int getLeafNodeCount(TreeNode root){if (root == null){return 0;}if(root.left == null && root.right ==null){return 1;}return getLeafNodeCount(root.left)+getLeafNodeCount(root.right);}
2:public int leafSize;public void getLeafNodeCount2(TreeNode root){if (root == null){return ;}if(root.left == null && root.right ==null){leafSize++;}getLeafNodeCount2(root.left);getLeafNodeCount2(root.right);}
 System.out.println(testBinaryTreee.getLeafNodeCount(root));testBinaryTreee.getLeafNodeCount2(root);System.out.println(testBinaryTreee.leafSize);

5 获取第K层节点的个数

 //获取第k层节点个数public int getKLevelNodeCount(TreeNode root,int k){if(root == null){return 0;}if (k==1){return 1;}return getKLevelNodeCount(root.left,k-1)+getKLevelNodeCount(root.right,k-1);}
System.out.println(testBinaryTreee.getKLevelNodeCount(root, 3));

 

6获取二叉树的高度

 //获取二叉树高度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;}
int height = testBinaryTreee.getHeight(root);System.out.println(height);

7检测值为value的元素是否存在

 // 检测值为val的元素是否存在public TreeNode find(TreeNode root,char val){if(root == null){return null;}if (root.val == val ){return root;}TreeNode ret = find(root.left,val);if (ret != null){return ret;}ret = find(root.right,val);if (ret != null){return ret;}return null;}
TestBinaryTreee.TreeNode retN = testBinaryTreee.find(root, 'E');System.out.println(retN.val);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/691900.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

商家转账到零钱怎么开通?一步步教你玩转微信营销新利器

在数字化营销日新月异的今天,微信支付凭借其便捷、安全的特点,成为了商家不可或缺的支付工具。而其中的“商家转账到零钱”功能,更是为商家提供了一个全新的营销利器。今天,我们就来详细解读一下如何开通这一功能(我处…

windows编译opencv4.9

opencv很多人在windows上编译感觉特别麻烦,没有linux下方便,设定以下三点,我们几乎会无障碍。 1 安装cuda,cudnn 安装好cuda,cudnn,把cudnn的头文件,库等等拷贝到cuda的安装目录下面&#xff…

5. 简单说一说uniapp中的语法吧

前言 如果你 知道Vue3并且对Vue3的语法有一定了解,请跳过这一章,由于后续项目主要是基于Vue3TypeScript,因此提前简单概述一些Vue3的基础语法~ 本文的目的是 期望通过对本文的阅读后能对Vue3的每个语法有一个简单的印象,至少要知…

git知识总结

要知道 本地回退后,反悔了,可以恢复。前提是已经提交了,提交了就丢不了。 git reflog git reset --hard commitId 以前git push不让推,就是没有对应关系。第一次推要setxxx参数。 前奏 设置用户名和邮箱,设置错…

数据分享—鄱阳湖矢量边界数据

鄱阳湖位于中国江西省北部,是中国最大的淡水湖泊之一,也是长江流域第一大湖。鄱阳湖水域广阔,湖区面积约为3600平方公里。鄱阳湖拥有丰富的水生生物资源,湖中有多种淡水鱼类和水生植物,是重要的渔业资源基地之一。湖泊…

【报错合集】完美解决“虚拟机使用的是此版本 VMware Workstation 不支持的硬件版本”

文章目录 解决方案:更改设置的硬件版本 今天我需要将别人的虚拟机克隆到我的VMware Workstation上运行,结果发生了以下的错误: 刚开始以为是VMware Workstation的版本问题太低导致的,所以我删除了原来的那个版本,下载…

哈希算法在区块链中的应用

哈希算法是区块链技术的核心组件之一,它确保了区块链数据的不可篡改性和安全性。在本文中,我们将探讨哈希算法的基本原理,以及它在区块链中的具体应用。 哈希算法的基本原理 哈希算法是一种数学函数,它接收输入(或“消…

实现echarts地图

效果图: 2.echarts.registerMap("xizang", XZ) 注册了一个名为 "xizang" 的地图,其中 XZ 是地图数据。 接下来是 option 对象,包含了图表的配置信息,比如图表的布局、提示框样式、地理组件配置和系列数据配置等。 在 t…

【计算机网络篇】数据链路层(9)使用集线器的共享式以太网

文章目录 🛸使用同轴电缆的共享总线以太网 🎆使用集线器的共享式以太网🥚集线器的特点 🍔10BASE-T星型以太网 🛸使用同轴电缆的共享总线以太网 若总线上的某个机械连接点接触不良或断开,则整个网络通信就不…

数据分析中大数据和云计算

大数据和云计算 前言一、大数据二、大数据定义三、数据存储单位四、大数据存储技术五、大数据应用技术六、大数据特征七、数据容量八、数据类型的多样性结构化数据半结构化数据非结构化数据 九、获取数据的速度十、可变性十一、真实性十二、复杂性十三、价值十四、云计算十五、…

求两个整数中的大者,用函数调用实现

在调用函数时,大多数情况下,函数是带参数的。主调函数和被调用函数之间有数据传递关系。前面已提到:在定义函数时函数名后面括号中的变量名称为形式参数(formal parameter,简称形参),在主调函数…

TriCore:Interrupt

今天简单总结下 TriCore 的中断路由模块。 名词缩写 缩写全程说明IRInterrupt Router SRService Request 包括: 1. External Resource 2. Internal Resource 3.SW(Software) SPService Privoder 包括: 1. CPU 2. DMA SRNServic…