节点定义
/**
* className:TreeNode
*
* @author:zjl
* @version:0.1
* @date:2020/7/1912:49
* @since:jdk1.8
*/
public class TreeNode {
private TreeNode left;
private Object data;
private TreeNode right;
public TreeNode() {
this.left = null;
this.data = null;
this.right = null;
}
public TreeNode(Object data) {
this.data = data;
}
public TreeNode getLeft() {
return left;
}
public void setLeft(TreeNode left) {
this.left = left;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public TreeNode getRight() {
return right;
}
public void setRight(TreeNode right) {
this.right = right;
}
}
工具类(实现类)
import sun.reflect.generics.tree.Tree;
import java.util.Stack;
/**
* className:Util
*
* @author:zjl
* @version:0.1
* @date:2020/7/1912:52
* @since:jdk1.8
*/
public class Util {
public void traversal(TreeNode treeNode ){
if(treeNode!=null){
Stack<TreeNode> stack = new Stack<>(); //创建一个栈
stack.push(treeNode);//根节点入栈
TreeNode node;//用于接收出栈节点
while (!stack.empty()){
node = stack.pop();
System.out.print(node.getData()+" ");//访问节点(data域)
if(node.getRight()!=null){
stack.push(node.getRight());//先将节点右孩子节点入栈
}
if(node.getLeft()!=null){
stack.push(node.getLeft());//再将节点左孩子节点入栈
}
}
}
}
}
测试类
手动建立一颗如图所示的树进行测试
/**
* className:Test
*
* @author:zjl
* @version:0.1
* @date:2020/7/1913:11
* @since:jdk1.8
*/
public class Test {
public static void main(String[] args) {
//手动建树
TreeNode n1 = new TreeNode("我");
TreeNode n2 = new TreeNode("爱");
TreeNode n3 = new TreeNode("中");
TreeNode n4 = new TreeNode("国");
TreeNode n5 = new TreeNode(",");
TreeNode n6 = new TreeNode("也");
TreeNode n7 = new TreeNode("爱");
TreeNode n8 = new TreeNode("世");
TreeNode n9 = new TreeNode("界");
TreeNode n10 = new TreeNode("!");
n1.setLeft(n2);
n2.setLeft(n3);
n3.setRight(n4);
n1.setRight(n5);
n5.setLeft(n6);
n6.setLeft(n7);
n5.setRight(n8);
n8.setLeft(n9);
n8.setRight(n10);
Util util = new Util();
//遍历
util.traversal(n1);
}
}
测试结果