劍指offer: 二叉樹(shù)

題目來(lái)源:??途W(wǎng)

題目描述:

有一棵二叉樹(shù),樹(shù)上每個(gè)點(diǎn)標(biāo)有權(quán)值,權(quán)值各不相同,請(qǐng)?jiān)O(shè)計(jì)一個(gè)算法算出權(quán)值最大的葉節(jié)點(diǎn)到權(quán)值最小的葉節(jié)點(diǎn)的距離。二叉樹(shù)每條邊的距離為1,一個(gè)節(jié)點(diǎn)經(jīng)過(guò)多少條邊到達(dá)另一個(gè)節(jié)點(diǎn)為這兩個(gè)節(jié)點(diǎn)之間的距離。
給定二叉樹(shù)的根節(jié)點(diǎn)root,請(qǐng)返回所求距離。


????關(guān)于下面的代碼,我是沒(méi)有寫(xiě)出的,一開(kāi)始的方向弄錯(cuò)了,看成了尋找權(quán)值最大的節(jié)點(diǎn)到最小的節(jié)點(diǎn)路徑。后面看討論區(qū)的時(shí)候,看到一個(gè)大神寫(xiě)的代碼,恍然大悟。
????原來(lái)所求的是葉節(jié)點(diǎn),他所用的方式給根節(jié)點(diǎn)、左子樹(shù)和右子樹(shù)編號(hào),然后進(jìn)行先序遍歷,每次遞歸時(shí),把編號(hào)添加到字符中,當(dāng)找到葉節(jié)點(diǎn)時(shí),再跟最大值、最小值比較。
????當(dāng)先序遍歷完成之后,再對(duì)最大值跟最小值記錄的路徑就行逐個(gè)字符比較,如果不相同就結(jié)束對(duì)比,記錄下此時(shí)的長(zhǎng)度,然后去掉,返回兩者去掉之后的和,即為所求的距離。


代碼實(shí)現(xiàn)

//典型的二進(jìn)制編碼題,算出葉子節(jié)點(diǎn)二進(jìn)制編碼,再比編碼,計(jì)算后綴長(zhǎng)度和
import java.util.*;

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}*/
public class Tree {
    private int max=0;
    private int min=99999;
    private StringBuilder maxcodec;
    private StringBuilder mincodec;
        void PreOrder(TreeNode T,char code,StringBuilder codec){
        if(T!=null){           
            codec.append(code);
            if(T.left==null && T.right==null)
            {
                if(max<T.val)
                {
                    max=T.val;
                    maxcodec = codec;
                }
                 
                if(min>T.val)
                {
                    min=T.val;
                    mincodec = codec;
                }
            }
            PreOrder(T.left,'0',new StringBuilder(codec));
            PreOrder(T.right,'1',new StringBuilder(codec));
        }
    }
    public int getDis(TreeNode root) {
        PreOrder(root,'0',new StringBuilder());
        int index=0;
        for(index=0; index<(maxcodec.length()>mincodec.length()?maxcodec.length():mincodec.length());index++)
        {
            if(maxcodec.charAt(index)!=mincodec.charAt(index))
                break;
        }
        return (maxcodec.substring(index).length()+mincodec.substring(index).length());
     
        // write code here
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容