package com.wang.learn;
import lombok.Data;
@Data
public class Tree {
private TreeNode treeNode;
}
package com.wang.learn;
import lombok.Data;
@Data
public class TreeNode {
private Long value;
private TreeNode left;
private TreeNode right;
}
package com.wang.learn;
import java.util.Stack;
public class Main {
// 遍歷方式1遞歸
public static void traversingTree(Tree tree) {
traversingTreeNode(tree.getTreeNode());
}
// 遍歷方式2 循環
public static void traversingTree2(Tree tree) throws InterruptedException {
Stack<TreeNode> stack = new Stack<>();
TreeNode treeNode = tree.getTreeNode();
while (treeNode != null) {
stack.push(treeNode);
TreeNode leftNode = treeNode.getLeft();
if (leftNode == null) {
TreeNode rightNode = null;
while (rightNode == null) {
if (stack.isEmpty()) {
break;
}
TreeNode node = stack.pop();
System.out.println(node.getValue());
rightNode = node.getRight();
}
treeNode = rightNode;
}
else {
treeNode = leftNode;
}
}
}
private static void traversingTreeNode(TreeNode treeNode) {
if (treeNode.getLeft() != null) {
traversingTreeNode(treeNode.getLeft());
}
System.out.println(treeNode.getValue());
if (treeNode.getRight() != null) {
traversingTreeNode(treeNode.getRight());
}
}
public static void main(String[] args) throws InterruptedException {
Tree tree = new Tree();
TreeNode treeNode = new TreeNode();
TreeNode treeNode2 = new TreeNode();
treeNode2.setValue(2l);
TreeNode treeNode4 = new TreeNode();
treeNode4.setValue(4l);
treeNode2.setLeft(treeNode4);
TreeNode treeNode5 = new TreeNode();
treeNode5.setValue(5l);
treeNode2.setRight(treeNode5);
TreeNode treeNode3 = new TreeNode();
treeNode3.setValue(3l);
TreeNode treeNode6 = new TreeNode();
treeNode6.setValue(6l);
treeNode3.setLeft(treeNode6);
TreeNode treeNode7 = new TreeNode();
treeNode7.setValue(7l);
treeNode3.setRight(treeNode7);
treeNode.setLeft(treeNode2);
treeNode.setRight(treeNode3);
treeNode.setValue(1l);
tree.setTreeNode(treeNode);
// 遍歷二叉樹
traversingTree2(tree);
}
}