寫一個函數,輸入一個二叉樹,樹中每個節點存放了一個整數值,函數返回這棵二叉樹中相差最大的兩個節點間的差值絕對值。請注意程序效率。

用遞歸求二叉樹的最大值和最小值。

package test;

class BinaryTreeNode {
    private int value;
    private BinaryTreeNode left;
    private BinaryTreeNode right;

    public BinaryTreeNode() {       
    }

    public BinaryTreeNode(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public BinaryTreeNode getLeft() {
        return left;
    }

    public void setLeft(BinaryTreeNode left) {
        this.left = left;
    }

    public BinaryTreeNode getRight() {
        return right;
    }

    public void setRight(BinaryTreeNode right) {
        this.right = right;
    }


}

public class test {
    int max = 0;
    int min = 0;
    public void Print(BinaryTreeNode tNode) {
        BinaryTreeNode node = tNode;
        if(node != null) {
            max = node.getValue();
            min = max;
        }else {
            System.out.println(0);
            return;
        }

        find(node);
        System.out.print(max-min);
    }

    public void find(BinaryTreeNode node) {

        if(max < node.getValue())
            max = node.getValue();
        if(min > node.getValue())
            min = node.getValue();

        if(node.getLeft() != null)
            find(node.getLeft());

        if(node.getRight() != null)
            find(node.getRight());


    }

    public static void main(String[] args) {
        BinaryTreeNode node1 = new BinaryTreeNode(1);
        BinaryTreeNode node2 = new BinaryTreeNode(2);
        BinaryTreeNode node3 = new BinaryTreeNode(3);
        BinaryTreeNode node4 = new BinaryTreeNode(4);
        BinaryTreeNode node5 = new BinaryTreeNode(5);
        BinaryTreeNode node6 = new BinaryTreeNode(6);
        BinaryTreeNode node7 = new BinaryTreeNode(7);
        node1.setLeft(node2);
        node1.setRight(node3);
        node2.setLeft(node4);
        node2.setRight(node5);
        node3.setLeft(node6);
        node3.setRight(node7);

        test test1 = new test();
        test1.Print(node1);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章