您的位置:首页 > 其它

每一层一个列表广度遍历二叉树

2015-09-28 19:51 260 查看


之前有个广度遍历二叉树类似的思想,将每一层放到一个集合去遍历。

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: