1、先序遍历
访问顺序:根节点->左孩子-> 右孩子
public void iPreOrder(TreeNode root) {
TreeNode p = root;
LinkedList<TreeNode> stack = new LinkedList<>();
if (p != null) {
stack.push(p);// 根节点入栈
while (!stack.isEmpty()) {
p = stack.pop(); // 根节点出栈
visit(p);// 访问根节点
if (p.right != null)
stack.push(p.right);// 右孩子入栈
if (p.left != null)
stack.push(p.left);// 左孩子入栈
}
}
}
2、中序遍历
访问顺序:左孩子->根节点->右孩子
public void iMidOrder(TreeNode tn) {
TreeNode p = tn;
LinkedList<TreeNode> stack = new LinkedList<>();
while (p != null || !stack.isEmpty()) {
while (p != null) {
stack.push(p);
p = p.left;// 访问至最左边,直至为空
}
if (!stack.isEmpty()) {
p = stack.pop(); // 最左元素出栈
visit(p);// 访问当前元素
p = p.right; // 指向当前元素的右孩子
}
}
}