根据字符串构建二叉树以及n叉树的层序遍历

本文介绍了如何使用Java实现从字符串表示转换为n叉树,并演示了如何遍历这种空节点的树结构。通过递归方法创建二叉树,并展示了levelOrder方法的层次遍历结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

空节点用null表示
例如:[1,2,3,4,null,null,null,null,20,21]

import java.util.*;

/**
 * @author WanZi
 * @create 2022-10-22 19:58
 */
public class Main01 {

    static class TreeNode {
		int val;
		TreeNode left;
		TreeNode right;
		public TreeNode(int val) {
			this.val = val;
		}
   }
	public static void main(String[] args) {
		TreeNode root = stringToTree("[1,2,3,4,,null,null,null,null,20,21]");
	}


    public static TreeNode stringToTree(String str){
        String[] elems = stringToArray(str);
        if (null == elems) {
            return null;
        }

        TreeNode root = createTree(elems, 0);
        return root;
    }
    //递归构建二叉树
    private static TreeNode createTree(String[] arr, int index) {
        TreeNode tn = null;
        if (index < arr.length) {
            if (arr[index].equals("null")) {
                return null;
            }
            Integer val = Integer.valueOf(arr[index]);
            tn = new TreeNode(val);
            // 构建二叉树左子树
            tn.left = createTree(arr, 2 * index + 1);
            // 构建二叉树右子树
            tn.right = createTree(arr, 2 * index + 2);
        }
        return tn;
    }
    public static String[] stringToArray(String str){
        if(null != str && str.equals("")){
            return null;
        }
        String[] fileds = str.split(",");
        return fileds;
    }
}



遍历n叉树


	static class TreeNode{
        public  int val;
        public List<TreeNode> child;
        public TreeNode() {
        }

        public TreeNode(int val) {
            this.val = val;
        }

        public TreeNode(int val, List<TreeNode> child) {
            this.val = val;
            this.child = child;
        }
    }
    //遍历n叉树
    public static List<List<Integer>> levelOrder(TreeNode root){
        List<List<Integer>> res = new ArrayList<>();
        if(root == null){
            return res;
        }
        Queue<TreeNode> q = new LinkedList<>();
        q.offer(root);
        while(!q.isEmpty()){
            int n = q.size();
            List<Integer> level = new ArrayList<>();
            while(n-- > 0){
                TreeNode node = q.poll();
                level.add(node.val);
                for(TreeNode child : node.child){
                    if(child != null){
                        q.offer(child);
                    }
                }
            }
            res.add(level);
        }
        return res;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值