Java二叉樹的遍歷
阿新 • • 發佈:2021-11-01
對於如上二叉樹,分別使用前序遍歷、中序遍歷、後序遍歷遍歷出它的每一個節點
在此之前,先新建一個節點類,節點類屬性包含當前節點的資料(字元)、當前節點的左、右節點。
當不對一個節點的左右節點賦值,由於他們是成員變數且為引用型別,有初始值null,左右子樹不賦值即左右子樹都為null即為葉子結點
- 新建TreeNode節點類
public class TreeNode { private String Data; private TreeNode left; private TreeNode right; public String getData() { return Data; } public void setData(String data) { Data = data; } public TreeNode getLeft() { return left; } public void setLeft(TreeNode left) { this.left = left; } public TreeNode getRight() { return right; } public void setRight(TreeNode right) { this.right = right; } public TreeNode(String data, TreeNode left, TreeNode right) { super(); Data = data; this.left = left; this.right = right; } public TreeNode() { super(); } public TreeNode(String data) { super(); Data = data; } @Override public String toString() { return Data; } }
- 遍歷
對於前序遍歷 先輸出根節點 再輸出左子樹 最後輸出右子樹
對於輸出子樹可以用遞迴實現,當遞迴到節點為null遞迴結束
對於中序遍歷 先輸出左子樹 再出根節點 最後輸出右子樹
對於輸出子樹可以用遞迴實現,當遞迴到節點為null遞迴結束
...
程式碼實現:
public class BinaryTreeErgodic { public static void beforePre(TreeNode cur) { if(cur==null) { return; } System.out.print(cur+" "); beforePre(cur.getLeft()); beforePre(cur.getRight()); } public static void afterPre(TreeNode cur) { if(cur==null) { return; } afterPre(cur.getLeft()); afterPre(cur.getRight()); System.out.print(cur+" "); } public static void midPre(TreeNode cur) { if(cur==null) { return; } midPre(cur.getLeft()); System.out.print(cur+" "); midPre(cur.getRight()); } }
3.構建二叉樹進行遍歷
public static void main(String[] args) { TreeNode a = new TreeNode("A"); TreeNode b = new TreeNode("B"); TreeNode c = new TreeNode("C"); TreeNode d = new TreeNode("D"); TreeNode e = new TreeNode("E"); TreeNode f = new TreeNode("F"); TreeNode g = new TreeNode("G"); TreeNode h = new TreeNode("H"); a.setLeft(b);a.setRight(c); b.setLeft(d);b.setRight(f); c.setLeft(g);c.setRight(h); d.setLeft(e); //BinaryTreeErgodic.afterPre(a); //BinaryTreeErgodic.midPre(a); //BinaryTreeErgodic.beforePre(a); }