二叉树的遍历
一、前序遍历
遍历顺序:先前序遍历树根,再前序遍历左子树,再前序遍历右子树
先遍历树根(A)--再遍历左子树(B)--再遍历左子树(D)--(D没有左子树了)再遍历右子树(E)--再遍历左子树(G)--(A没有左子树了)再遍历右子树(C)--(C没有左子树了)再遍历右子树(F) ;故顺序为 A-B-D-E-G-C-F;
二、中序遍历
遍历顺序:先中序遍历左子树,再遍历树根,再中序遍历右子树
先遍历左子树(D)--再遍历其父元素(B)--再遍历右子树(E)--再遍历左子树(G)--再遍历树根(A)--(A没有左子树了)再遍历右子树(C)--(C没有左子树了)再遍历右子树(F) ;故顺序为 D-B-G-E-A-C-F;
三、后序遍历
遍历顺序:先后序遍历左子树,再后序遍历右子树,再遍历树根
先遍历左子树(D)--再遍历左子树(G)--再遍历其父元素(E)--再遍历其父元素(B)--再遍历右子树(F)--在遍历其父元素(C)--再遍历s树根(A) ;故顺序为 D-G-E-B-F-C-A;
代码实现:
定义树节点 TreeNode.java
package interview.tree;
public class TreeNode {
private final char value;
private TreeNode left;
private TreeNode right;
private TreeNode parent;
public TreeNode(char value) { //定义树的节点
this.value = value;
this.left = null;
this.right = null;
this.parent = null;
}
public char getValue() {
return value;
}
public TreeNode getLeft() {
return left;
}
public void setLeft(TreeNode left) {
this.left = left;
if (this.left != null) {
this.left.setParent(this);
}
}
public TreeNode getRight() {
return right;
}
public void setRight(TreeNode right) {
this.right = right;
if (this.right != null) {
this.right.setParent(this);
}
}
public TreeNode getParent() {
return parent;
}
private void setParent(TreeNode parent) {
this.parent = parent;
}
}
定义二叉树 TreeCreater.java
package interview.tree;
public class TreeCreator { //使用Node创建树
public TreeNode createSampleTree() {
TreeNode root = new T