1.对称二叉树
class Solution {
public boolean isSymmetric(TreeNode root) {
if(root == null) {
return true;
}
return isSymmetricChild(root.left,root.right);
}
public boolean isSymmetricChild(TreeNode leftTree,TreeNode rightTree) {
//结构都为空
if(leftTree == null && rightTree == null) {
return true;
}
//结构一个为空一个不为空
if(leftTree == null && rightTree != null || leftTree != null && rightTree == null) {
return false;
}
//值
if(leftTree.val != rightTree.val) {
return false;
}
return isSymmetricChild(leftTree.left,rightTree.right)
&& isSymmetricChild(leftTree.right,rightTree.left);
}
}
2.平衡二叉树
class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null) {
return true;
}
return getHeight(root) >= 0;
}
public int getHeight(TreeNode root) {
if(root == null) {
return 0;
}
int leftHeight = getHeight(root.left);
if(leftHeight < 0) {
return -1;
}
int rightHeight = getHeight(root.right);
if(leftHeight >= 0 && rightHeight >= 0
&& Math.abs(leftHeight-rightHeight) <= 1) {
return Math.max(leftHeight,rightHeight) + 1;
}else {
return -1;
}
}
}
3.二叉树的构造及遍历
import java.util.*;
public class Main{
// 二叉树的节点进行定义
public static class TreeNode{
char value;
TreeNode left;
TreeNode right;
public TreeNode( char value){
this.value = value;
}
}
// 指向二叉树的根节点
TreeNode root;
int index;
void createBinaryTree(String preStr, char invalid){
index = 0;
root = createBinaryTreeN(preStr, invalid);
}
TreeNode createBinaryTreeN(String preStr, char invalid){
TreeNode treeRoot = null;
if(index < preStr.length() && preStr.charAt(index) != invalid){
// 创建根节点
treeRoot = new TreeNode(preStr.charAt(index));
// 创建根节点的左子树
++index;
treeRoot.left = createBinaryTreeN(preStr, invalid);
// 创建根节点的右子树
++index;
treeRoot.right = createBinaryTreeN(preStr, invalid);
}
return treeRoot;
}
public void InOrder(){
InOrder(root);
System.out.println();
}
private void InOrder(TreeNode treeRoot){
if(treeRoot != null){
InOrder(treeRoot.left);
System.out.print(treeRoot.value + " ");
InOrder(treeRoot.right);
}
}
public static void main(String[] args){
Scanner scaner = new Scanner(System.in);
while(scaner.hasNext()){
// 接收前序遍历的结果
String str = scaner.nextLine();
Main tree = new Main();
tree.createBinaryTree(str, '#');
tree.InOrder();
}
}
}
4.二叉树的分层遍历
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> retList = new ArrayList<>();
if(root == null) {
return retList;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()) {
//拿当前队列的节点个数来看
int size = queue.size();
List<Integer> list = new ArrayList<>();
while(size != 0) {
TreeNode cur = queue.poll();
list.add(cur.val);
size--;
if(cur.left != null) {
queue.offer(cur.left);
}
if(cur.right != null) {
queue.offer(cur.right);
}
}
retList.add(list);
}
return retList;
}
}
记得收藏!!!
链接: