Java二叉樹的前序、中序、後序遍歷
阿新 • • 發佈:2018-11-04
相信一直關注平時業務程式碼的同學都很少關注二叉樹、堆、棧等資料結構的訪問和遍歷。
今天我們就說說二叉樹的遍歷
什麼是前序遍歷?什麼是中序遍歷?什麼是後序遍歷?這個不懂的先自行百度一下吧。
二叉樹和連結串列的區別是,連結串列只有後序節點,二叉樹雖然沒有next節點,但是有左節點和右節點。
所以我們先定義二叉樹的節點。
程式碼如下:
public class NodeWD<T> { private T value;//節點值 private NodeWD<T> leftNode; //左節點 private NodeWD<T> rightNode;//右節點 public NodeWD(){ } public NodeWD(T value,NodeWD<T> leftNode,NodeWD<T> rightNode){ this.value=value; this.leftNode=leftNode; this.rightNode=rightNode; } public T getValue() { return value; } public void setValue(T value) { this.value = value; } public NodeWD<T> getLeftNode() { return leftNode; } public void setLeftNode(NodeWD<T> leftNode) { this.leftNode = leftNode; } public NodeWD<T> getRightNode() { return rightNode; } public void setRightNode(NodeWD<T> rightNode) { this.rightNode = rightNode; } }
接下來是遍歷
public class BinaryTree<T> { public void printNode(NodeWD<T> T){ System.out.print(T.getValue().toString()); } //先序遍歷 public void firstTraversal(NodeWD<T> root){ if(root!=null){ printNode(root); } if(root.getLeftNode()!=null){ firstTraversal(root.getLeftNode()); } if(root.getRightNode()!=null){ firstTraversal(root.getRightNode()); } } public void orderTraversal(NodeWD<T> root){ if(root.getLeftNode()!=null){ orderTraversal(root.getLeftNode()); }printNode(root); if(root.getRightNode()!=null){ orderTraversal(root.getRightNode()); } } public void lastTraversal(NodeWD<T> root){ if(root.getLeftNode()!=null){ lastTraversal((root.getLeftNode())); } if(root.getRightNode()!=null){ lastTraversal(root.getRightNode()); } printNode(root); } }
呼叫程式碼:
public static void main(String[] args) { //注意必須逆序建立,先建立子節點,再逆序往上建立, // 因為非葉子結點會使用到下面的節點,而初始化是按順序初始化的,不逆序建立會報錯 NodeWD<Integer> J=new NodeWD<>(8,null,null); NodeWD<Integer> H=new NodeWD<>(4,null,null); NodeWD<Integer> G=new NodeWD<>(2,null,null); NodeWD<Integer> F=new NodeWD<>(7,J,null); NodeWD<Integer> E=new NodeWD<>(5,H,null); NodeWD<Integer> D=new NodeWD<>(1,null,G); NodeWD<Integer> C=new NodeWD<>(9,F,null); NodeWD<Integer> B=new NodeWD<>(3,D,E); NodeWD<Integer> A=new NodeWD<>(6,B,C); BinaryTree<Integer> binaryTree=new BinaryTree<>(); binaryTree.firstTraversal(A); System.out.println("*******************"); binaryTree.orderTraversal(A); System.out.println("*******************"); binaryTree.lastTraversal(A); }
打印出的結果:
631254978
*******************
123456879
*******************
214538796