网上的算法大多数是c语言的,Java对与树的操作比较少,都是指针操作,所以Java也可以实现。
网上的要么是一边输入一边构建,要么是手动insert,个人感觉不是一种特别好的写法。我这里用的是字符串构建,以‘#’分割。
本文主要是二叉树的构建,没有太多关于二叉树的操作,思路比较简单,故不做算法逻辑介绍。
二叉树结构类
public class BinaryTreeNode {
    char value;
    BinaryTreeNode left;
    BinaryTreeNode right;
    BinaryTreeNode() {}
    BinaryTreeNode(BinaryTreeNode left, BinaryTreeNode right){
        this.left = left;
        this.right = right;
    }
}
二叉树操作接口类
/**
 * @author: wbb
 * @date 2022/2/23 3:02 下午
 */
public interface BinaryTreeOperate {
    public BinaryTreeNode createTree(BinaryTreeNode node, char[] chars);
    public void preOrderTraverse(BinaryTreeNode node);
    public void inOrderTraverse(BinaryTreeNode node);
    public void postOrderTraverse(BinaryTreeNode node);
}
二叉树操作实现类
/**
 * @author: wbb
 * @date 2022/2/23 3:04 下午
 */
public class BinaryTreeOperateImpl implements BinaryTreeOperate{
    int i = 0;
    @Override
    public BinaryTreeNode createTree(BinaryTreeNode node, char[] chars) {
        if(chars[i] == '#'){
            node = null;
            i ++;
        } else{
            if(i != 0){
                node = new BinaryTreeNode();
            }
            node.value = chars[i];
            i ++;
            
            node.left = createTree(node.left, chars);
            node.right = createTree(node.right, chars);
        }
        return node;
    }
    @Override
    public void preOrderTraverse(BinaryTreeNode node) {
        if(node == null){
            return;
        }
        System.out.println(node.value);
        preOrderTraverse(node.left);
        preOrderTraverse(node.right);
    }
    @Override
    public void inOrderTraverse(BinaryTreeNode node) {
        if(node == null){
            return;
        }
        preOrderTraverse(node.left);
        System.out.println(node.value);
        preOrderTraverse(node.right);
    }
    @Override
    public void postOrderTraverse(BinaryTreeNode node) {
        if(node == null){
            return;
        }
        preOrderTraverse(node.left);
        preOrderTraverse(node.right);
        System.out.println(node.value);
    }
}
main,这里只展示调用的关键代码
        BinaryTreeNode node = new BinaryTreeNode();
        BinaryTreeOperate operate = new BinaryTreeOperateImpl() ;
        char[] chars = {'a','b','#','d','#','#','c','#','#'};
        operate.createTree(node, chars);
        operate.preOrderTraverse(node);
输出

                  
                  
                  
                  
      
          
                
                
                
                
              
                
                
                
                
                
              
                
                
              
            
                  
					4578
					
被折叠的  条评论
		 为什么被折叠?
		 
		 
		
    
  
    
  
            


            