資料結構 二叉樹練習題

2021-10-05 04:25:09 字數 4715 閱讀 5967

求二叉樹的高度-只能彙總思想

int

getheight

(node root)

int left=

getheight

(root.left)

;int right=

getheight

(root.right)

;return math.

max(left,right)+1

;}

求二叉樹第k層結點的個數

彙總:

1.利用遞迴求左子樹第k-

1層的結點個數;

2利用遞迴求右子樹第 k-

1層的結點個數;

3.整棵樹第k層的結點個數= left+right

出口:root==null return

0root!=null&&k==

1return

1k>=

1int

getklevel

(node root,

int k)

if(k==1)

int left=

getklevel

(root,k-1)

;int right=

getklevel

(root,k-1)

;return left

}

// 查詢 val 所在結點,沒有找到返回 null

// 按照 根 -> 左子樹 -> 右子樹的順序進行查詢

// 一旦找到,立即返回,不需要繼續在其他位置查詢

node find

(node root,

int val)

if(root.val==val)

node n=

find

(root.left,val);if

(n!=null)

n=find

(root.right,val)

if(n!=null)

return null;

}

判斷val 是否在結點中

boolean

find

(node root,

int val)

if(root.val==val)if(

find

(root.left,val)

)else

}

判斷是否為相同的二叉樹

public

boolean

issametree

(treenode p, treenode q)

if(p==null||q==null)

return p.val==q.val&&

issametree

(p.left,q.left)

&&issametree

(p.right,q.right)

;}

判斷二叉樹是否為映象二叉樹

boolean

ismirrortree

(node p,node q)

if(p==null||q==null)

return p.val==q.val&&

ismirrortree

(p.left,q.right)

&&ismirrortree

(p.right,q.left)

;}

判斷二叉樹是否為對稱二叉樹

private

boolean

ismirrortree

(treenode p,treenode q)

if(p==null||q==null)

return p.val==q.val&&

ismirrortree

(p.left,q.right)

&&ismirrortree

(p.right,q.left);}

public

boolean

issymmetric

(treenode root)

return

ismirrortree

(root.left,root.right)

;}

判斷乙個樹是否是另乙個樹的子樹

思想:

乙個樹是另乙個樹的子樹 則

1)要麼這兩個樹相等;

2)要麼這個樹是左樹的子樹

3)要麼這個樹是右樹的子樹

private

boolean

issametree

(treenode p, treenode q)

if(p==null||q==null)

return p.val==q.val&&

issametree

(p.left,q.left)

&&issametree

(p.right,q.right);}

public

boolean

issubtree

(treenode s, treenode t)

if(s==null||t==null)

return

issametree

(s,t)

||issubtree

(s.left,t)

||issubtree

(s.right,t)

;}

判斷是否為平衡二叉樹

平衡二叉樹:乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。

思想: 

根:左右子樹高度差的絕對值不超過1

左子樹:是平衡的

右子樹:是平衡的

private

intgetheight

(treenode root)

int left=

getheight

(root.left)

;int right=

getheight

(root.right)

;return math.

max(left,right)+1

;}public

boolean

isbalanced

(treenode root)if(

!isbalanced

(root.left))if

(!isbalanced

(root.right)

)int left=

getheight

(root.left)

;int right=

getheight

(root.right)

;int diff=left-right;

if(diff>=-1

&&diff<=1)

return

false

;}

前中後序的非遞迴遍歷

//前序遍歷

public

static

void

preorder

(node root)

node top=stack.

pop();

cur=top.right;

}//中序遍歷

public

static

void

inorder

(node root)

node top=stack.

pop();

system.out.

println

(top.val)

cur=top.right

}//後序遍歷

public

static

void

postorder

(node root)

node top=stack.

peek()

;if(top.right==null||top.right==last)

else

}

二叉樹的層序遍歷

/**

* definition for a binary tree node.

* public class treenode

* }*/class

solution

// 建立佇列依次存放每層的結點

queue

q =newlinkedlist

<

>()

; q.

add(root)

;while

(!q.

isempty()

)if(node.right != null)

}// 陣列每次都是放的一層的結點,然後一層一層的放入二維陣列中

ans.

add(tmp);}

return ans;

}}

資料結構二叉樹習題

1.問題描述 二叉樹結點值為大寫字母,輸入二叉樹的前序遍歷和中序遍歷序列,生成此二叉樹,輸出該二叉樹的後序遍歷和按層次遍歷序列。輸入某結點值,在二叉樹中查詢該結點,若該結點存在,則輸出從根到該結點的路徑,否則給出不存在資訊。2.演算法思路 樹的建立 將樹的前序序列和中序序列分別存入兩個陣列中,前序序...

練習題之重建二叉樹

題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。實現 definition for binary tree public class treenode 遞迴實現 public...

二叉樹練習題及解析

1 某二叉樹的前序序列和後序序列正好相反,則該二叉樹一定是 的二叉樹。答 高度等於其節點數 解析 前序遍歷順序是 m l r 後序遍歷的順序是 l r m 其中l r的相對位置不發生變化,變化的是m的位置。題目指出二叉樹的先序序列和後序序列結果正好相反 當二叉樹只有乙個節點時,只有m,l和r為空,滿...