当前位置:网站首页>实现二叉树的基本操作
实现二叉树的基本操作
2022-07-31 05:19:00 【欧粒粒】
先序遍历,中序遍历,后序遍历,求节点个数,求叶子节点的个数,求第k层节点的个数,查找节点。
import java.util.ArrayList;
public class TestBinaryTree {
static class TreeNode {
public char val;
public TreeNode left;
public TreeNode right;
public TreeNode(char val) {
this.val = val;
}
}
public TreeNode creteTree() {
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;
E.right = H;
C.left = F;
C.right = G;
return A;//根节点
}
// 前序遍历
public void preOrder(TreeNode root) {
if(root == null) {
return;
}
System.out.print(root.val+" ");
preOrder(root.left);
preOrder(root.right);
}
// 中序遍历
void inOrder(TreeNode root) {
if(root == null) {
return;
}
inOrder(root.left);
System.out.print(root.val+" ");
inOrder(root.right);
}
// 后序遍历
void postOrder(TreeNode root) {
if(root == null) {
return;
}
postOrder(root.left);
postOrder(root.right);
System.out.print(root.val+" ");
}
public static int count = 0;
// 获取树中节点的个数 遍历思路:
public void size1(TreeNode root){
if(root == null) {
return ;
}
count++;
size1(root.right);
size1(root.left);
}
public int size2(TreeNode root){
if(root == null) {
return 0;
}
//root不为空
int tmp = size2(root.left) + size2(root.right)+1;
return tmp;
}
public static int leafCount = 0;
// 获取叶子节点的个数 遍历思路
void getLeafNodeCount1(TreeNode root){
if(root == null) {
return;
}
if(root.left == null && root.right == null) {
leafCount++;
}
getLeafNodeCount1(root.left);
getLeafNodeCount1(root.right);
}
// 获取叶子节点的个数 子问题
int getLeafNodeCount2(TreeNode root){
if(root == null) {
return 0;
}
if(root.left == null && root.right == null) {
return 1;
}
int tmp = getLeafNodeCount2(root.left) + getLeafNodeCount2(root.right);
return tmp;
}
// 获取第K层节点的个数
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);
}
// 获取二叉树的高度
int getHeight(TreeNode root){
if(root == null) {
return 0;
}
int leftH = getHeight(root.left);
int leftR = getHeight(root.right);
return leftH > leftR ? leftH+1 : leftR+1;
}
// 检测值为value的元素是否存在
TreeNode find(TreeNode root, int 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;
}
// 判断一棵树是不是完全二叉树
boolean isCompleteTree(TreeNode root) {
return true;
}
}
public class TestDemo {
public static void main(String[] args) {
TestBinaryTree testBinaryTree = new TestBinaryTree();
TestBinaryTree.TreeNode root = testBinaryTree.creteTree();
testBinaryTree.preOrder(root);
System.out.println();
testBinaryTree.inOrder(root);
System.out.println();
testBinaryTree.postOrder(root);
System.out.println();
System.out.println("=========节点的个数======");
testBinaryTree.size1(root);
System.out.println(TestBinaryTree.count);
System.out.println("=========节点的个数======");
System.out.println(testBinaryTree.size2(root));
System.out.println("叶子节点的个数:");
testBinaryTree.getLeafNodeCount1(root);
System.out.println(TestBinaryTree.leafCount);
System.out.println(testBinaryTree.getLeafNodeCount2(root));
System.out.println("=============第K层==========");
System.out.println(testBinaryTree.getKLevelNodeCount(root, 4));
System.out.println("============查找某个数据========");
TestBinaryTree.TreeNode ret = testBinaryTree.find(root,'p');
try {
System.out.println(ret.val);
}catch (NullPointerException e) {
System.out.println("没有你要找的数据!");
e.printStackTrace();
}
}
}
边栏推荐
- 超详细!!!让你了解冒泡排序的底层逻辑和思想
- 这些数组技巧,我爱了
- file和stat命令的使用,文件类型:代表字符,以及英文
- DOM操作-案例:切换背景图片
- 第一次实践——计算器
- 软链接和硬链接画图,以及代码,一级目录的解释,重定向,创建文件,删除文件,创建目录,删除目录,cp、mv命令的使用
- Rejection sampling note
- The content of the wangeditor editor is transferred to the background server for storage
- Where can I find the private files set by myself?
- 力扣.找到打字符串中所有字母异位词
猜你喜欢

911崩了,自养号测评环境IP有哪些更好的选择

Attention based ASR(LAS)

Getting Started with MySQL: The Case Statement Works Well

box-shadow related properties

IDEA概述和安装及调试

cenos7安装cmake-3.22.2

Log jar package conflict, and its solution

堆和栈的区别

The content of the wangeditor editor is transferred to the background server for storage

Image binarization processing of opencv
随机推荐
C语言结构体(必须掌握版)
Qt TreeView 问题记录
性能测试概述
file和stat命令的使用,文件类型:代表字符,以及英文
Unity版本升级问题总结
在 AWS 上从零开始设置 Incredibuild 构建系统
文件内容浏览cut、uniq、sort、tr命令的使用,
软件测试之登录测试详解
ES6-新增的基本数据:Symbol
记一次QT 2D 画图 实现3D动态效果
2022年软件测试现状最新报告
map和set
实现离线文件推流成rtsp 2
Wlan实验(ENSP)
【内网开发日记】用websocket手搓一个聊天软件
5G的用途和工作原理
力扣刷题.快乐数
2021-09-30
可下载视频可下载图片的函数
解决nx安装 jtop问题