中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Java通過遞歸進(jìn)行二叉樹遍歷

2018-07-20    來源:open-open

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用
// 測試二叉樹遍歷,遞歸算法
public class TestBinaryTree {
    public static void main(String[] args) {
        Node<String> g = new Node<String>("G", null, null);
        Node<String> e = new Node<String>("E", null, null);
        Node<String> f = new Node<String>("F", null, null);
        Node<String> d = new Node<String>("D", null, g);
        Node<String> b = new Node<String>("B", d, e);
        Node<String> c = new Node<String>("C", null, f);
        Node<String> a = new Node<String>("A", b, c);
 
        System.out.println("生成的二叉樹:");
        System.out.println("            A");
        System.out.println("            |     ");
        System.out.println("       |---------|");
        System.out.println("       B         C");
        System.out.println("       |         |");
        System.out.println("  |---------|     -----|");
        System.out.println("  D         E          F");
        System.out.println("  |");
        System.out.println("   ----|");
        System.out.println("       G");
 
        System.out.println("二叉樹深度:" + BinaryTree.getDepth(a));
 
        System.out.print("前序遍歷:");
        BinaryTree.priorderTraversal(a);
        System.out.println();
 
        System.out.print("中序遍歷:");
        BinaryTree.inorderTraversal(a);
        System.out.println();
 
        System.out.print("后序遍歷:");
        BinaryTree.postorderTraversal(a);
        System.out.println();
    }
}
 
// 二叉樹
class BinaryTree {
    // 前序遍歷
    static <T> void priorderTraversal(Node<T> node) {
        if (node != null) {
            visitNode(node);
            priorderTraversal(node.getLeftChild());
            priorderTraversal(node.getRightChild());
        }
    }
 
    // 中序遍歷
    static <T> void inorderTraversal(Node<T> node) {
        if (node != null) {
            inorderTraversal(node.getLeftChild());
            visitNode(node);
            inorderTraversal(node.getRightChild());
        }
    }
 
    // 后序遍歷
    static <T> void postorderTraversal(Node<T> node) {
        if (node != null) {
            postorderTraversal(node.getLeftChild());
            postorderTraversal(node.getRightChild());
            visitNode(node);
        }
    }
 
    // 二叉樹深度
    static <T> int getDepth(Node<T> node) {
        if (node == null) {
            return 0;
        }
        int leftDepth = 0;
        int rightDepth = 0;
        leftDepth = getDepth(node.getLeftChild());
        rightDepth = getDepth(node.getRightChild());
        return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
    }
 
    // 訪問節(jié)點(diǎn)
    static <T> void visitNode(Node<T> node) {
        System.out.print(node.getKey() + " ");
    }
}
 
// 節(jié)點(diǎn)
class Node<T> {
    private T key;
    private Node<T> leftChild;
    private Node<T> rightChild;
 
    public Node() {
 
    }
 
    public Node(T key, Node<T> leftChild, Node<T> rightChild) {
        super();
        this.key = key;
        this.leftChild = leftChild;
        this.rightChild = rightChild;
    }
 
    public T getKey() {
        return key;
    }
 
    public void setKey(T key) {
        this.key = key;
    }
 
    public Node<T> getLeftChild() {
        return leftChild;
    }
 
    public void setLeftChild(Node<T> leftChild) {
        this.leftChild = leftChild;
    }
 
    public Node<T> getRightChild() {
        return rightChild;
    }
 
    public void setRightChild(Node<T> rightChild) {
        this.rightChild = rightChild;
    }
 
}

輸出結(jié)果:
生成的二叉樹: 
            A 
            |      
       |---------| 
       B         C 
       |         | 
  |---------|     -----| 
  D         E          F 
  | 
   ----| 
       G 
二叉樹深度:4 
前序遍歷:A B D G E C F  
中序遍歷:D G B E A C F  
后序遍歷:G D E B F C A   

標(biāo)簽:

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:Python壓縮和解壓縮文件(zip/unzip)

下一篇:Android系統(tǒng)上拉刷新功能的實(shí)現(xiàn)