1.給定乙個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)
class
solution
if(node.right != null)
list.
add(node.val);}
res.
add(
0,list)
;往隊頭新增
}return res;
}}
2.給定乙個二叉樹,找出其最大深度。
二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。
說明: 葉子節點是指沒有子節點的節點。
class
solution
//第二種方法——bfs層序遍歷
// public int maxdepth(treenode root)
// if(node.right != null)
// }
// i++;
// }
// return i;
// }
}
3.根據一棵樹的前序遍歷與中序遍歷構造二叉樹。
class
solution
private treenode creat
(int prel,
int prer,
int inl,
int inr,
int[
] preorder,
int[
] inorder)
treenode root =
newtreenode
(preorder[prel]);
//新建乙個新的結點,用來存放當前二叉樹的根節點,新節點的資料域為根節點的值
int k;
for(k = inl; k <= inr; k++)}
int numleft = k - inl;
//左子樹的節點個數
//左子樹的先序區間為[prel+1, prel+numleft],中序區間為[inl, k-1]
//返回左子樹的根節點位址,賦值給root的左指標
root.left =
creat
(prel +
1, prel + numleft, inl, k -
1, preorder, inorder)
;//右子樹的先序區間為[prel+numleft+1,prer],中序區間為[k+1, inr]
//返回右子樹的根節點位址,賦值給root的右指標
root.right =
creat
(prel + numleft +
1, prer, k+
1, inr, preorder, inorder)
;return root;
//返回根節點
}}
4.根據一棵樹的中序遍歷與後序遍歷構造二叉樹。
class
solution
private treenode creat
(int postl,
int postr,
int inl,
int inr,
int[
]inorder,
int[
] postorder)
treenode root =
newtreenode
(postorder[postr]);
//新建乙個新的結點,用來存放當前二叉樹的根節點,新節點的資料域為根節點的值
int k =0;
for(k = inl; k < inr; k++)}
int numleft = k - inl;
//左子樹節點的個數
root.left =
creat
(postl, postl+numleft-
1, inl, k-
1, inorder, postorder)
; root.right =
creat
(postl+numleft, postr-
1, k+
1, inr, inorder, postorder)
;return root;
}}
4.將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。
本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。
class
solution
private treenode buildtree
(int
nums,
int l,
int r)
int m = l +
(r - l)/2
; treenode root =
newtreenode
(nums[m]);
root.left =
buildtree
(nums, l, m -1)
; root.right =
buildtree
(nums, m +
1, r)
;return root;
}}
5.給定乙個單鏈表,其中的元素按公升序排序,將其轉換為高度平衡的二叉搜尋樹。
本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。
class
solution
//將鍊錶分成倆個部分
pre.next = null;
treenode root =
newtreenode
(p.val)
; root.left =
sortedlisttobst
(head)
; root.right =
sortedlisttobst
(p.next)
;return root;
}}
6.給定乙個二叉樹,判斷它是否是高度平衡的二叉樹。
本題中,一棵高度平衡二叉樹定義為:
乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1。
class
solution
private
intheight
(treenode root)
else
}}
7.給定乙個二叉樹,找出其最小深度。
最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。
說明: 葉子節點是指沒有子節點的節點。
class
solution
// return 1+math.max(maxdepth(root.left),maxdepth(root.right));
if(root == null)
//null節點不參與比較
if(root.left == null && root.right != null)
if(root.right == null && root.left != null)
return
1+math.
min(
mindepth
(root.left)
,mindepth
(root.right));
}}
二叉樹專題
一般的樹 struct node node newnode int v void search node root,int x,int newdata if root data x search root lchild,x,newdata search root rchild,x,newdata 注...
leetcode 二叉樹 對稱二叉樹
給定乙個二叉樹,檢查它是否是映象對稱的。例如,二叉樹 1,2,2,3,4,4,3 是對稱的。1 2 2 3 4 4 3 但是下面這個 1,2,2,null,3,null,3 則不是映象對稱的 1 2 2 3 3 方法一 遞迴 思路 如果乙個樹的左子樹與右子樹映象對稱,則該樹是對稱的 兩個樹互為映象的...
LeetCode (二叉樹)反轉二叉樹
遞迴交換每乙個節點的左右子樹,重點在於訪問每乙個節點,然後交換左右子樹 definition for a binary tree node.struct treenode struct treenode inverttree struct treenode root 由於至少要講每乙個節點都訪問一次...