簡體   English   中英

將二叉樹轉換為無重復的堆棧

[英]converting binary tree to stack without duplicates

我有一個對象類型為InfoTree的二叉樹,該對象具有2個屬性-數字和字符,但是某些字符可以重復自身。我的最終目標是找到具有最大數字的字符並返回其字符的對象。 為此,我有一個函數來查找最大數量並遞歸返回,但是我仍然需要將數字與二叉樹中的字符進行匹配,因此我想到了將樹轉換為僅包含字符但沒有重復的堆棧的方法問題。 我的不同字符是:k,e,c,d,但是我所做的將堆棧更改為[k,d,c]-沒有e,並且基本上不起作用。

//input : The function gets a stack and a character
//output : The function returns true if the character given is in the stack
public static boolean isInStack(Stack<Character> s,char ch){
    while(!s.isEmpty()){
        if(s.pop()==ch)
            return true;
    }
    return false;
}

 //The function puts all different characters in a stack
public static void stack(BinTreeNode<InfoTree> t,Stack<Character> s){
    s.push(t.getValue().getTav());
    if(t!=null){
        if(t.getLeft()!=null&&t.getRight()!=null){
            if(!isInStack(s,t.getValue().getTav())){
                s.push(t.getValue().getTav());
            }
            stack(t.getLeft(),s);
            stack(t.getRight(),s);
        }
        else if(t.getLeft()!=null)
        {
            if(!isInStack(s,t.getValue().getTav())){
                s.push(t.getValue().getTav());
            }
            stack(t.getLeft(),s);
        }
        else if(t.getRight()!=null)
        {
            if(!isInStack(s,t.getValue().getTav())){
                s.push(t.getValue().getTav());
            }
            stack(t.getRight(),s);
        }
    }
}

樹是:

//input : none
//output : The function builds  and returns a tree
public static BinTreeNode<InfoTree> buildtree(){
    BinTreeNode<InfoTree> t1=new BinTreeNode<InfoTree>(new BinTreeNode<InfoTree>(new InfoTree('k',1)),new InfoTree('k',3),new BinTreeNode<InfoTree>(new InfoTree('k',0)));
    t1.getLeft().setLeft(new BinTreeNode<InfoTree>(new InfoTree('k',0)));
    t1.getLeft().setRight(new BinTreeNode<InfoTree>(new InfoTree('k',0)));
    t1.getLeft().getRight().setLeft(new BinTreeNode<InfoTree>(new InfoTree('e',0)));
    t1.getLeft().getRight().getLeft().setRight(new BinTreeNode<InfoTree>(new InfoTree('d',0)));

    t1.getRight().setLeft(new BinTreeNode<InfoTree>(new InfoTree('c',1)));  
    t1.getRight().getLeft().setRight(new BinTreeNode<InfoTree>(new InfoTree('c',0)));
    return t1;
}

我將非常感謝您的幫助!

堆棧是用於收集集合的可怕數據結構。 假設您有一個包含元素A,B,C的堆棧,其中A是堆棧的頂部,並且在代碼中您具有另一個C。在彈出所有元素並返回true表示元素在其中之后,代碼將停止,但是您的堆棧現在將包含零個元素。 那是結果的樹的最后一個節點。 跑步后,您有4個元素中就有3個是幸運的。

正確的數據結構應為Set:

Set<Character> setA = new HashSet<Character>();
setA.add('a');
setA.add('a');
setA.add('b');
setA.add('b');
setA.contains('a'); // ==> true
Character[] result = setA.toArray(new Character[setA.size()]);

基本上,您不需要檢查是否已添加它,因為它可以處理它。 最后,您將擁有獨特的字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM