求二叉樹的高度-只能彙總思想
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為空,滿...