package suanfaTest.TreeNode;
public class TreeNode {
int data;
//左子树
TreeNode leftNode;
//右子树
TreeNode rightNode;
public TreeNode() {
}
public TreeNode(int data) {
this.data = data;
}
public TreeNode(int data, TreeNode leftNode, TreeNode rightNode) {
this.data = data;
this.leftNode = leftNode;
this.rightNode = rightNode;
}
}
package suanfaTest.TreeNode;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class ShenduAndGuangduBianli {
public static void main(String args[]){
TreeNode head = new TreeNode(1);
TreeNode second = new TreeNode(2);
TreeNode three = new TreeNode(3);
TreeNode four = new TreeNode(4);
TreeNode five = new TreeNode(5);
TreeNode six = new TreeNode(6);
TreeNode seven = new TreeNode(7);
head.rightNode = three;
head.leftNode = second;
second.rightNode = five;
second.leftNode = four;
three.rightNode = seven;
three.leftNode = six;
ShenduAndGuangduBianli sb = new ShenduAndGuangduBianli();
System.out.println("广度优先遍历结果: ");
sb.GuangduFirst(head);
System.out.println("深度优先遍历结果: ");
sb.ShengduFirst(head);
}
//广度优先遍历,使用的是队列
public void GuangduFirst(TreeNode nodeHead){
if (nodeHead == null){
return;
}
Queue<TreeNode> myQueue = new LinkedList<TreeNode>();
((LinkedList<TreeNode>) myQueue).add(nodeHead);
while (!myQueue.isEmpty()){
//当队列不为空时,先弹出队列中的一个元素,然后将左孩子和右孩子添加进队列
TreeNode node = myQueue.poll();//node为弹出的那个元素
System.out.print(node.data+ " ");
if (null!=node.leftNode){
((LinkedList<TreeNode>) myQueue).add(node.leftNode);
}
if (null!=node.rightNode){
((LinkedList<TreeNode>) myQueue).add(node.rightNode);
}
}
System.out.println();
}
//深度优先遍历
public void ShengduFirst(TreeNode nodeHead){
if (nodeHead == null){
return;
}
Stack<TreeNode> myStack = new Stack<TreeNode>();
myStack.add(nodeHead);
while (!myStack.isEmpty()){
TreeNode node = myStack.pop();//弹出栈顶元素
System.out.print(node.data+" ");//输出的是node对应的元素值
if (null != node.rightNode){
myStack.push(node.rightNode);
}
if (null != node.leftNode){
myStack.push(node.leftNode);
}
}
}
}
复制代码的时候记得去除包名