算法题解:把二叉树打印成多行

题目描述

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

示例1
输入
{8,6,10,5,7,9,11}

返回值
[[8],[6,10],[5,7,9,11]]

代码实现

import java.util.ArrayList;


/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
import java.util.*;
public class Solution {
    ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
        if(null == pRoot){
            return list;
        }
        List<TreeNode> nodeList = new ArrayList<TreeNode>();
        if(null != pRoot.left){
            nodeList.add(pRoot.left);
        }
        if(null != pRoot.right){
            nodeList.add(pRoot.right);
        }
        
        ArrayList<Integer> rootList = new ArrayList<Integer> ();
        rootList.add(pRoot.val);
        list.add(rootList);
        if(null != nodeList && nodeList.size()>0){   //考虑子节点存在需要处理
           printLevel(list,nodeList);
        }
        return list;
        
    }
    
   
    //输入指定节点下的子节点
    public void printLevel(ArrayList<ArrayList<Integer>> levelList,List<TreeNode> nodeList){
        ArrayList<Integer> valList = new ArrayList<Integer> ();
        List<TreeNode> childNodeList = new ArrayList<TreeNode>();
        for(int i=0;i<nodeList.size();i++){
            valList.add(nodeList.get(i).val);
            if( null != nodeList.get(i).left ){
                childNodeList.add(nodeList.get(i).left);
            }
            if(null != nodeList.get(i).right){
                childNodeList.add(nodeList.get(i).right);
            }
        }
        levelList.add(valList);
        if(null !=childNodeList && childNodeList.size()>0){   //如果下级还有子节点,按照当前处理方式,把后一级同层次节点都处理
            printLevel(levelList,childNodeList);
        }
    }
    
}

解题思路

这道题需要注意的一点是 “每一层输出一行” ,即同层次的节点要放在一起。上述代码 printLevel 方法即是处理树的同一层次的全部节点,因为处理逻辑一样,只是处理的节点不一致,所以直接回调printLevel方法即可,直到处理完全部节点,没有子节点了。

猜你喜欢

转载自blog.csdn.net/qq_22596931/article/details/110232648
今日推荐