java实现二叉树层次遍历

Python040

java实现二叉树层次遍历,第1张

import java.util.ArrayList

public class TreeNode {

private TreeNode leftNode

private TreeNode rightNode

private String nodeName

public TreeNode getLeftNode() {

return leftNode

}

public void setLeftNode(TreeNode leftNode) {

this.leftNode = leftNode

}

public TreeNode getRightNode() {

return rightNode

}

public void setRightNode(TreeNode rightNode) {

this.rightNode = rightNode

}

public String getNodeName() {

return nodeName

}

public void setNodeName(String nodeName) {

this.nodeName = nodeName

}

public static int level=0

public static void findNodeByLevel(ArrayList<TreeNode>nodes){

if(nodes==null||nodes.size()==0){

return

}

level++

ArrayList<TreeNode>temp = new ArrayList()

for(TreeNode node:nodes){

System.out.println("第"+level+"层:"+node.getNodeName())

if(node.getLeftNode()!=null){

temp.add(node.getLeftNode())

}

if(node.getRightNode()!=null){

temp.add(node.getRightNode())

}

}

nodes.removeAll(nodes)

findNodeByLevel(temp)

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

TreeNode root = new TreeNode()

root.setNodeName("root")

TreeNode node1 = new TreeNode()

node1.setNodeName("node1")

TreeNode node3 = new TreeNode()

node3.setNodeName("node3")

TreeNode node7 = new TreeNode()

node7.setNodeName("node7")

TreeNode node8 = new TreeNode()

node8.setNodeName("node8")

TreeNode node4 = new TreeNode()

node4.setNodeName("node4")

TreeNode node2 = new TreeNode()

node2.setNodeName("node2")

TreeNode node5 = new TreeNode()

node5.setNodeName("node5")

TreeNode node6 = new TreeNode()

node6.setNodeName("node6")

root.setLeftNode(node1)

node1.setLeftNode(node3)

node3.setLeftNode(node7)

node3.setRightNode(node8)

node1.setRightNode(node4)

root.setRightNode(node2)

node2.setLeftNode(node5)

node2.setRightNode(node6)

ArrayList<TreeNode>nodes = new ArrayList<TreeNode>()

nodes.add(root)

findNodeByLevel(nodes)

}

}

java Map 遍历一般有四种方式

方式一: 这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。

方式二: 在for-each循环中遍历keys或values。

如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。

该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。

方式三:使用Iterator遍历

使用泛型:

不使用泛型:

你也可以在keySet和values上应用同样的方法。

方法四:  通过键找值遍历(效率低)

作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。

因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。

总结:

如果仅需要键(keys)或值(values)使用方法二。

如果所使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。

否则使用方法一(键值都要)。

扩展资料:

类似的遍历算法:

二叉树的遍历算法

1、先(根)序遍历的递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴ 访问根结点;

⑵ 遍历左子树

⑶ 遍历右子树。

2、中(根)序遍历的递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴遍历左子树;

⑵访问根结点;

⑶遍历右子树。

3、后(根)序遍历得递归算法定义:

若二叉树非空,则依次执行如下操作:

⑴遍历左子树;

⑵遍历右子树;

⑶访问根结点。

参考资料:百度百科——Java