题解 | #按之字形顺序打印二叉树#

按之字形顺序打印二叉树

https://www.nowcoder.com/practice/91b69814117f4e8097390d107d2efbe0

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pRoot TreeNode类 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> Print (TreeNode pRoot) {
         if(pRoot == null) {
            return new ArrayList<>();
        }
         // 方向
        int direction = 0;
        List<TreeNode> head = Arrays.asList(pRoot);
        ArrayList<ArrayList<Integer>> result = new ArrayList<>();

        return executePrint(head, direction, result);

    }

    private ArrayList<ArrayList<Integer>> executePrint(List<TreeNode> head, int direction,
        ArrayList<ArrayList<Integer>> result) {
        ArrayList<Integer> list = new ArrayList<>();
        if (head.size() == 0) {
            return result;
        }

        if(direction == 0) {
		  // 正方向
            for (TreeNode treeNode : head) {
                list.add(treeNode.val);
            }
            List<TreeNode> children = getChildList(head);
            result.add(list);
            executePrint(children, (direction+1)%2, result);
        }else {
		  // 反方向
            List<TreeNode> children = getChildList(head);
		  // head转方向
            Collections.reverse(head);
            for (TreeNode treeNode : head) {
			  // 只是需要转完方向后的值而已
                list.add(treeNode.val);
            }
            result.add(list);
            executePrint(children, (direction+1)%2, result);
        }
        return result;

    }

    private List<TreeNode> getChildList(List<TreeNode> head) {
        if(head.size() == 0)
            return new ArrayList<>();
        List<TreeNode > nodes = new ArrayList<>();
        for (TreeNode treeNode : head) {
            if(treeNode.left!= null) {
                nodes.add(treeNode.left);
            }
            if(treeNode.right!= null) {
                nodes.add(treeNode.right);
            }
        }
        return nodes;
    }
}

全部评论

相关推荐

06-02 15:53
阳光学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务