leetcode二叉樹專題總結(二)

2021-10-03 13:35:45 字數 3960 閱讀 6322

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 由於至少要講每乙個節點都訪問一次...