資料結構之關於樹的操作(JAVA實現)(三)

2021-06-29 12:40:21 字數 1585 閱讀 5014

樹的基本結構

public class treenode

}

1.構建一顆樹(本文以表示式樹為例,用字尾表示式構建,我在前一篇已近介紹了如何將中序轉換為後續表示式)

原理:利用棧。步驟:a.當前字元為字元或者數字,則直接構建乙個節點,然後入棧

b.當前字元為操作符,則在棧中取出兩個節點,將這兩個節點作為孩子節點構建一棵樹入棧

c.最後將棧中剩下的唯一節點返回,就是要構建的樹

// 構建一顆字元樹,即數學表示式

public static treenodegettree(string obj)

else

// 操作符的話,從棧中取出兩個樹節點,然後合併成乙個節點,操作符為根節點

}return stack.pop();

}

2.用先序,中序,後序

列印一顆樹,這個沒有什麼好說的

/*

* 遞迴 列印一棵樹 先序,中序,後序

*/// 先序遍歷一棵樹,(根左右)

public string printtreepreoreder(treenodenode)

return obj;

}// 中序遍歷一棵樹(左根右)

public string printtreeinfixoreder(treenodenode)

return obj;

}// 後續遍歷一棵樹(左右根)

public string printtreepostoreder(treenodenode)

return obj;

}

3.得到樹的高度(使用遞迴)

原理:樹根的高度=最大的孩子的高度+1

// 得到一棵樹額高度

public int getheight()

4.列印樹的第k層(遞迴實現)

原理:可以理解為列印根的第k層,即列印根的孩子的第k-1層,當k=0時,可以直接列印出來

// 列印一棵樹的第level層

public void printtreeatlevel(treenodenode, int level)

5.按層次列印一棵樹

我實現了兩種方法:

方法一:

知道了樹的高度,依次列印出各層的高度。但是這種方法,會在列印任何一層的時候都會從根節點開始,浪費時間

// 按照樹的格式列印一棵樹,必須按層次列印

public void printtree()

}

方法二:

用兩個佇列實現,佇列1儲存所有的同一層葉節點,佇列2儲存儲存佇列1的正在訪問的孩子節點 ,佇列1訪問完以後,將佇列2加到佇列1(此時是空佇列)中,再講佇列2清空

public void printtreebyqueue(treenoderoot)

queue1.addall(queue2);

system.out.println();

}}

Java資料結構之234樹

n叉樹簡介 每個節點只有乙個資料項,並且每個節點最多只有兩個子節點的樹稱為二叉樹。如果每個節點可以存多個 大於等於3 資料項,並且每個節點可以擁有多個 大於等於3 子節點的樹稱為n 大於等於3 叉樹。n叉樹相對於二叉樹而言,儲存相等數量的資料,n叉樹因為同一層存放的資料變多,相應樹的高度就變小,查詢...

關於資料結構之線段樹

這幾天都一直在看關於線段樹的題目還有題解,還有做題!以前也知道有線段樹這個東西,但是那時沒有好好的看,就看了個簡單的皮毛!所以現在又拿出來好好看看!一開始看,一直看題解,還有就是模仿,首先看一遍,初步了解一下,然後就是按著別人的題解再抄著寫一遍直到通過測試,當然不是直接對著乙個乙個的copy上,然後...

資料結構(java) 樹

線性結構中,乙個節點至多只有乙個頭節點,至多只有乙個尾節點,彼此連線起來是一條完整的線。比如鍊錶和陣列 而樹,非線性結構的典型例子,不再是一對一,而變成了一對多 而圖則可以是 多對多 如下圖所示 幾個概念 1 根節點 父親節點 孩子節點 葉子節點 2 節點的度 節點擁有的子樹的數目稱為節點的度。比如...