輸入輸入某二叉樹的前序遍歷和中序遍歷的結果,請重構該二叉樹。
假設輸入的前序遍歷和中序遍歷的結果中都不包含重複的數字。例如,輸入前序遍歷序列和中序遍歷序列,重建該樹。樹的結點類如下:
class
treenode
}
通過前序遍歷獲取根節點的值,然後遍歷中序遍歷序列,找到根節點,將中序遍歷陣列分成左右兩個樹支,然後遞迴呼叫,構成乙個樹。
public treenode reconstructbinarytree
(int
pre,
int[
] in)
if(pre.length==
0|| in.length ==0)
//前序和中序遍歷的長度不一致
if(pre.length != in.length)
//獲取樹的根節點
treenode root =
newtreenode
(pre[0]
);for(
int i=
0;ireturn root;
}
思路:初步思考這樣實現:
...
...|-6-|
....
..|.
..|-8.
.|-3-|
..|.
..|-51
-|..|-2-
|...
...|..
.|-7..
....|-4-
|
實現display方法,列印樹的結構;先列印右子樹的結點,然後再列印根節點,最後列印左子節點。
設定樹的每乙個節點的表示字串,樹的結點類表示如下:
class
treenode
}
通過構造樹,並將每乙個節點表示的字串進行設定
/**
* 用於設定每乙個節點的字串描述
* @param parent 父節點
* @param next 設定字串的結點
* @param flag 是否是左節點的右節點的判斷
*/private
static
void
settreestructure
(treenode parent,treenode next,
boolean flag)
//首先是將前面的根節點的數字替換為' . ' ,為後面新增自己的數值做準備
next.s = parent.s.
replaceall
("[0-9]|-"
,".").
substring(0
,parent.s.
length()
-1);
//如果不是內嵌節點,就可以直接將| 全部替換為 .
if(flag ==
false)}
//新增該節點的值
next.s+=
"|-"
+next.value+
"-|"
;//進入左右節點的判斷
if(parent.leftnode == next )}if
(parent.rightnode == next)
if(next.rightnode != null)
}}
最後將樹的結構列印出來
public
static
void
printtree
(treenode node)
//如果沒有子節點,就不列印後面的"-|「
if(node.leftnode==null&&node.rightnode==null)
else
if(node.leftnode!=null)
}
最後來個主方法,看看如何設定樹的結構
public
static
void
main
(string [
] args)
;//先根遍歷結果
int[
] in =
;//後根遍歷結果
treenode root =
reconstructbinarytree
(pre,in)
;//display(root);
root.s = root.value +
"-|"
;settreestructure
(root,root.leftnode,
false);
//設定左節點
settreestructure
(root,root.rightnode,
false);
//輸出
printtree
(root)
;}
平衡樹的基本操作
題目名稱 2056 2002湖南 營業額統計 題目簡述 description tiger 最近被公司公升任為營業部經理,他上任後接受公司交給的第一項任務便是統計並分析公司成立以來的營業情況。tiger 拿出了公司的賬本,賬本上記錄了公司成立以來每天的營業額。分析營業情況是一項相當複雜的工作。由於節...
樹的基本操作演算法
關於樹的一些基本操作,本來把自己的一些研究寫出來!方便大家學習!樹可以以陣列的形式存放,也可以以鍊錶的形式存放!根據程式不同的需要選擇不同的存放形式!陣列的操作比較簡單作有限!本文不做研究!本文只是對鏈式儲存,做了一些簡單的研究!樹的鍊錶形式 struct node2 也可以是 struct nod...
Treap樹的基本操作
3.treap的操作 同其他樹形結構一樣,treap的基本操作有 查詢,插入,刪除等。3.1 查詢 同其他二叉樹一樣,treap的查詢過程就是二分查詢的過程,複雜度為o lg n 3.2 插入 在treap 中插入元素,與在bst 中插入方法相似。首先找到合適的插入位置,然後建立新的節點,儲存元素。...