二叉树 : 每个节点都有两个子节点的特殊树形结构
二叉树的存储方式:
- 连续内存的数组存储结构。2.链式存储结构。
二叉树的遍历方式:
- 前序遍历
- 中序遍历
- 后序遍历
- 层序遍历
前序遍历:从根结点开始访问,如果当前结点有left左结点,则先遍历左结点,再遍历右结点。 “根左右”
中序遍历:从根结点开始(注意不访问该结点),如果当前结点有左结点,且当前左结点的左结点为Null,则先访问该结点,然后访问该结点的父结点,再访问该结点的兄弟结点。“左根右”
后序遍历:从根结点开始(注意不访问该结点),如果当前结点有左结点,且当前左结点的左结点为Null,则先访问该结点,然后访问该结点的兄弟结点,再访问该结点的父亲结点。“左右根”
层序遍历:从根结点所在层树开始,按照层号的顺序遍历。
代码实现
import java.util.LinkedList;
/**树的遍历 lengweijian*/
public class Tree{
public static void main(String[] args){
// A
// B C
// D E F G
TreeNode head = new TreeNode("A");
head.left = new TreeNode("B");
head.right = new TreeNode("C");
head.left.left = new TreeNode("D");
head.left.right = new TreeNode("E");
head.right.left = new TreeNode("F");
head.right.right = new TreeNode("G");
access(head);
}
private static void access(TreeNode head)
{
// 前序遍历
System.out.print("前序遍历 :");
preAccess(head);
//
System.out.println();
System.out.print("中序遍历 :");
ordAccess(head);
System.out.println();
System.out.print("后序遍历 :");
afterAccess(head);
System.out.print("层序遍历 :");
System.out.println();
layerAccess(head);
}
private static void layerAccess(TreeNode head){
if(head == null) return;
LinkedList<TreeNode> lists = new LinkedList<TreeNode>();
lists.add(head);
TreeNode currentNode = null;
while(!lists.isEmpty())
{
currentNode = lists.poll();
System.out.print(currentNode.val+" ");
if(currentNode.left != null)
lists.offer(currentNode.left);
if(currentNode.right != null)
lists.offer(currentNode.right);
}
}
/**前序遍历:ABEFCDG*/
private static void preAccess(TreeNode head){
if(head == null) return ;
System.out.print(head.val + "\t");
preAccess(head.left);
preAccess(head.right);
}
/**中序遍历:DBEAFCG */
private static void ordAccess(TreeNode head){
if(head == null) return ;
ordAccess(head.left);
System.out.print(head.val + "\t");
ordAccess(head.right);
}
/**后续遍历:DEBFGCA*/
private static void afterAccess(TreeNode head){
if(head == null) return ;
afterAccess(head.left);
afterAccess(head.right);
System.out.print(head.val + "\t");
}
}
class TreeNode{
String val;
TreeNode left;
TreeNode right;
public TreeNode(String val){
this.val = val;
}
}
运行结果 :