package tree;
import java.awt.geom.QuadCurve2D;
import java.util.LinkedList;
import java.util.Queue;
public class TreeTools {
//判断树中节点的个数
public static <T> int getTreeNum(TreeNode<T> root) {
if (root==null) {
return 0;
}
return getTreeNum(root.leftChild)+getTreeNum(root.rightChild);
}
//判断树的深度
public static <T> int getTreeDepth(TreeNode<T> root) {
if (root==null) {
return 0;
}
int leftDepth=getTreeDepth(root.leftChild)+1;
int rightDepth = getTreeDepth(root.rightChild)+1;
return Math.max(leftDepth, rightDepth);
}
//前序遍历
public static <T> void preOrderTravel(TreeNode<T> root) {
if (root==null) {
return;
}
visitNode(root);
preOrderTravel(root.leftChild);
preOrderTravel(root.rightChild);
}
//中序遍历
public static <T> void midOrderTravel(TreeNode<T> root) {
if (root==null) {
return;
}
midOrderTravel(root.leftChild);
visitNode(root);
midOrderTravel(root.rightChild);
}
//中序遍历
public static <T> void backOrderTravel(TreeNode<T> root) {
if (root==null) {
return;
}
backOrderTravel(root.leftChild);
backOrderTravel(root.rightChild);
visitNode(root);
}
//访问并打印节点
private static <T> void visitNode(TreeNode<T> node) {
System.out.println(node.value+"\t");
}
//分层遍历
public static <T> void levelTravel(TreeNode<T> root) {
Queue<TreeNode<T>> q = new LinkedList<TreeNode<T>>();
q.offer(root);
while (!q.isEmpty()) {
TreeNode<T> temp = q.poll();
visitNode(temp);
if (temp.leftChild!=null) {
q.offer(temp.leftChild);
}
if (temp.rightChild!=null) {
q.offer(temp.rightChild);
}
}
}
//求第k层节点的个数
public static <T> int getNumOfLevel(TreeNode<T> root,int k) {
if (root==null||k<1) {
return 0;
}
if (k==1) {
return 1;
}
int leftNum = getNumOfLevel(root.leftChild, k-1);
int rightNum = getNumOfLevel(root.rightChild, k-1);
return leftNum+rightNum;
}
//求二叉树中叶子节点的个数
public static <T> int getLeafNum(TreeNode<T> root) {
if (root ==null) {
return 0;
}
if (root.leftChild ==null && root.rightChild ==null) {
return 1;
}
int leftNum = getLeafNum(root.leftChild);
int rightNum = getLeafNum(root.rightChild);
return leftNum+rightNum;
}
//交换根节点的左右子树
public static <T> TreeNode<T> exchangeLeftAndRight(TreeNode<T> root) {
if (root==null) {
return null;
}
TreeNode<T> left =exchangeLeftAndRight(root.leftChild);
TreeNode<T> right = exchangeLeftAndRight(root.rightChild);
root.leftChild =right;
root.rightChild =left;
return root;
}
//查看node是否是root的子节点
public static <T> boolean nodeIsChildOfRoot(TreeNode<T> root,TreeNode<T> node) {
if (root ==null||node==null) {
return false;
}
if (root ==node) {
return true;
}
boolean isFind = nodeIsChildOfRoot(root.leftChild, node);
if (!isFind) {
isFind = nodeIsChildOfRoot(root.rightChild, node);
}
return isFind;
}
}
Java,树的操作
最新推荐文章于 2022-01-11 21:50:41 发布