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);
}
}
}
}
複製代碼的時候記得去除包名