之前有个广度遍历二叉树类似的思想,将每一层放到一个集合去遍历。
private ArrayList<ArrayList<Integer>> Print(TreeNode pRoot)
{
// pRoot为空,返回为空的集合
if (pRoot == null)
return new ArrayList<ArrayList<Integer>>();
else
{
//所有层的集合
ArrayList<ArrayList<TreeNode>> list = new ArrayList<ArrayList<TreeNode>>();//总节点列表
//添加根节点
ArrayList<TreeNode> listRoot = new ArrayList<TreeNode>();
listRoot.add(pRoot);
list.add(listRoot);
//如果存在左子树或右子树
if(pRoot.left != null ||pRoot.right != null)
{
//list2用于存下一层的节点
ArrayList<TreeNode> list2 = null;
list2 = new ArrayList<TreeNode>();
if(pRoot.left != null) list2.add(pRoot.left);
if(pRoot.right != null) list2.add(pRoot.right);
do
{
ArrayList<TreeNode> list3 = new ArrayList<TreeNode>();
for(TreeNode treeNode : list2)
{
if(treeNode.left != null) list3.add(treeNode.left);
if(treeNode.right != null) list3.add(treeNode.right);
}
list.add(list2);
//list2指向下一层
list2 = list3;
}while(list2.size() != 0);
}
/*
* 将节点值分别取出来
*/
ArrayList<ArrayList<Integer>> integerList = new ArrayList<ArrayList<Integer>>();
for(ArrayList<TreeNode> list4 : list)
{
ArrayList<Integer> intlist = new ArrayList<Integer>();
for(TreeNode t : list4)
{
intlist.add(t.val);
}
integerList.add(intlist);
}
return integerList;
}