java层次遍历算法思路?

Python019

java层次遍历算法思路?,第1张

找个例子看一下就有了。比如递归前序遍历二叉树,即先根遍历。先遍历根节点,之后向下又是一个跟节点,在遍历做节点,在遍历右节点,依次下去,知道没有右节点结束。在遍历右边的部分,根节点,左节点,右节点,知道没有右节点是为止。至此遍历结束。书上有图一看就知道了。其他的遍历按照遍历算法一样。建议看下数据结构的遍历,讲的很详细。

public class BinaryTree {

 

 int data      //根节点数据

 BinaryTree left    //左子树

 BinaryTree right   //右子树

 

 public BinaryTree(int data)    //实例化二叉树

 {

  this.data = data

  left = null

  right = null

 }

 

 public void insert(BinaryTree root,int data){     //向二叉树中插入子节点

  if(data>root.data)                               //二叉树的左节点都比根节点小

  {

   if(root.right==null){

    root.right = new BinaryTree(data)

   }else{

    this.insert(root.right, data)

   }

  }else{                                          //二叉树的右节点都比根节点大

   if(root.left==null){

    root.left = new BinaryTree(data)

   }else{

    this.insert(root.left, data)

   }

  }

 }

}

当建立好二叉树类后可以创建二叉树实例,并实现二叉树的先根遍历,中根遍历,后根遍历,代码如下:

package package2

public class BinaryTreePreorder {

 

 public static void preOrder(BinaryTree root){  //先根遍历

  if(root!=null){

   System.out.print(root.data+"-")

   preOrder(root.left)

   preOrder(root.right)

  }

 }

 

 public static void inOrder(BinaryTree root){     //中根遍历

  if(root!=null){

   inOrder(root.left)

   System.out.print(root.data+"--")

   inOrder(root.right)

  }

 }

 

 public static void postOrder(BinaryTree root){    //后根遍历

  if(root!=null){

   postOrder(root.left)

   postOrder(root.right)

   System.out.print(root.data+"---")

  }

 }

 

 public static void main(String[] str){

  int[] array = {12,76,35,22,16,48,90,46,9,40}

  BinaryTree root = new BinaryTree(array[0])   //创建二叉树

  for(int i=1i<array.lengthi++){

   root.insert(root, array[i])       //向二叉树中插入数据

  }

  System.out.println("先根遍历:")

  preOrder(root)

  System.out.println()

  System.out.println("中根遍历:")

  inOrder(root)

  System.out.println()

  System.out.println("后根遍历:")

  postOrder(root)

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)

}

}