首页 > 其他分享 >根据层序遍历结果来构建完全二叉树

根据层序遍历结果来构建完全二叉树

时间:2023-06-04 11:15:11浏览次数:36  
标签:index 遍历 TreeNode int 层序 二叉树 new root 节点

做实习笔试时遇到的一个题里用到了根据层序遍历的结果来构建二叉树。全部代码如下

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();//输入节点数量
        int len = Integer.parseInt(str);
        int[] nums = new int[len];
        str = br.readLine();//输入节点内容
        StringTokenizer st = new StringTokenizer(str);
        int i = 0;
        //将节点数值存入数组中
        while(st.hasMoreTokens()){
            nums[i++] = Integer.parseInt(st.nextToken());
        }
        Queue<TreeNode> queue = new ArrayDeque<>();
        TreeNode root= null;//根节点
        int index = 0;
        while(index < len){
            //如果队列中没有节点,创建根结点放入其中
            if(queue.isEmpty()){
                root = new TreeNode(nums[index++]);
                queue.add(root);
            }else {
                //如果有了节点,开始取节点,添加子节点
                TreeNode node = queue.poll();
                if (index < len){
                    node.left = new TreeNode(nums[index++]);
                    queue.add(node.left);
                }
                if (index < len) {
                    node.right = new TreeNode(nums[index++]);
                    queue.add(node.right);
                }
            }
        }
        //先序遍历验证构建结果
        pre(root);
    }
    private static void pre(TreeNode root){
        if(root == null) return;
        System.out.println(root.val);
        pre(root.left);
        pre(root.right);
    }

}
class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int val){this.val = val;}
}

 

标签:index,遍历,TreeNode,int,层序,二叉树,new,root,节点
From: https://www.cnblogs.com/myz99/p/17455341.html

相关文章

  • 【python基础】复杂数据类型-列表类型(排序/长度/遍历)
    1.列表数据元素排序在创建的列表中,数据元素的排列顺序常常是无法预测的。这虽然在大多数情况下都是不可避免的,但经常需要以特定的顺序呈现信息。有时候希望保留列表数据元素最初的排列顺序,而有时候又需要调整排列顺序。python提供了很多列表数据元素排序的方式,可根据情况选用。1......
  • File类:遍历文件夹的方法
        ......
  • 图的遍历
    引入:图的遍历是指从图的某一顶点出发按某种方法访问图中所有顶点,并且每个顶点只访问一次树是一种特殊的图,所以树的遍历可以看作是图的遍历的特殊化,但图的遍历要更复杂主要有两种遍历算法,广度优先和深度优先1.广度优先搜索BFS基本思想:1随机选定一个起始点v2从v出发访问v的......
  • 链式二叉树的实现(c语言)
    本篇博客主要写了如何完成二叉树的前,中,后序遍历,查找特定值的节点,计算最大深度等。都是对二叉树的一些基本操作。二叉树基本操作头文件typedefcharBTDataType;typedefstructBinaryTreeNode{ BTDataTypedata; structBinaryTreeNode*left; structBinaryTreeNode*right;......
  • Map系列集合的遍历方式三:Lambda
          ......
  • Map系列集合的遍历方式二:键值对
        ......
  • Map系列集合的遍历方式一:键找值
        ......
  • shell遍历当前目录下的文件,用去掉文件后缀的字符串替换文件中的文本
    今天写了一个shell,遍历当前目录下的文件,用每个文件的文件名去掉后缀的字符串替换文件中的一段字符串。 脚本如下:#!/bin/bashfile=`ls*.html`;echo$fileforitemin$filedofilename=${item%.*}echo$filenamesed-i"s/search('channel')/search('${fi......
  • LeetCode 236_ 二叉树的最近公共祖先
    classSolution{public:vector<TreeNode*>path1,path2;booldfs(TreeNode*root,TreeNode*p,vector<TreeNode*>&path){if(!root)returnfalse;if(root==p||dfs(root->left,p,path)||dfs(root->right,p,path))......
  • 剑指 Offer II 048. 序列化与反序列化二叉树
    题目链接:剑指OfferII048.序列化与反序列化二叉树方法:先序遍历(dfs)解题思路 在先序遍历过程中,节点值之间通过空格隔开,好利于后续反序列化过程中获取值。代码classCodec{public://Encodesatreetoasinglestring.stringserialize(TreeNode*root){......