当前位置:网站首页>实现二叉树的基本操作
实现二叉树的基本操作
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();
}
}
}
边栏推荐
猜你喜欢
随机推荐
cenos7配置IP,配置IP不生效
DOM操作案例1-点击,使表格的颜色切换(点击单元格,整行或整列颜色切换)
滑动窗口法
力扣.字母异位词分组
通过js禁止ctrl+滚轮放缩浏览器页面,禁止用手势放大
堆和栈的区别
可下载视频可下载图片的函数
常用浏览器内核的了解、ES5和ES6的区别、ES6的更新的笔试题
DOM操作-通过关系来获取元素
记一次QT 2D 画图 实现3D动态效果
超详细!!!让你通透数组!!!初学复习不迷路!!
测试CSDN积分需求
Unity Text一个简单的输入特效
第一次实践——计算器
Wlan实验(ENSP)
The solution to the IDEA console not being able to enter information
UR3机器人运动学分析之正运动学分析
crontab timing operation
Image binarization processing of opencv
C语言结构体(必须掌握版)