class
solution
private
:// 遞迴的方法
void
inorder
(treenode* root, vector<
int>
& nodes)
inorder
(root-
>left, nodes)
; nodes.
push_back
(root-
>val)
;inorder
(root-
>right, nodes);}
// 非遞迴的方法
vector<
int>
inorder_iteration
(treenode* root)
root = todo.
top();
// 訪問當前節點
todo.
pop();
nodes.
push_back
(root -
> val)
; root = root -
> right;
}return nodes;}}
;
/*
* 利用乙個vectortemp記錄當前層的節點值
每次先計算對面中的size(),就可以知道當前層有多少節點
*/class
solution
ans.
push_back
(temp);}
return ans;}}
;
給定乙個二叉樹,檢查它是否是映象對稱的。
class
solution
return
helper
(root-
>left, root-
>right);}
bool
helper
(treenode* leftnode, treenode* rightnode)if(
!leftnode ||
!rightnode || leftnode-
>val != rightnode-
>val)
return
helper
(leftnode-
>left, rightnode-
>right)
&&helper
(leftnode-
>right, rightnode-
>left);}
};
lass solution
int leftdepth =
maxdepth
(root-
>left)
;int rightdepth =
maxdepth
(root-
>right)
;return
max(leftdepth, rightdepth)+1
;}};
class
solution
bool
helper
(treenode* root,
long
long low,
long
long high)
if(root-
>val <= low || root-
>val >= high)
return
helper
(root-
>left, low, root-
>val)
&&helper
(root-
>right, root-
>val, high);}
};
class
solution
// 遞迴將中點設定為當前結點,遞迴左右結點
treenode*
helper
(vector<
int>
& nums,
int low,
int high)
int mid =
(low + high)/2
; treenode* root =
newtreenode
(nums[mid]);
root-
>left =
helper
(nums, low, mid -1)
; root-
>right =
helper
(nums, mid +
1, high)
;return root;}}
;
/*
* dp[i]表示i個結點有幾種解法
假設左邊分j個結點,根節點乙個,右邊結點就是i-j-1個結點
不使用遞迴,而使用遍歷陣列
*/class
solution
; dp[0]
=1; dp[1]
=1;for
(int i =
2; i <= n; i++)}
return dp[n];}
};
二叉樹的相關題目
目錄 1 求二叉樹的遍歷順序為自下至上,自右至左的層序遍歷序列 2 判斷二叉樹是否為完全二叉樹 3 統計二叉樹中雙分支結點的個數 4 求先序遍歷序列中第k個結點的值 5 求二叉樹的高度 6 判斷二叉樹是否為二叉排序樹 7 求出二叉排序樹中結點所在的層數 演算法思想 使用層序遍歷。二叉樹正常的層序遍歷...
6 二叉樹相關題目
目錄 nc5 二叉樹根節點到葉子節點和為指定值的路徑 思路 先序遍歷的思想 根左右 數字求和 每一層都比上層和 10 當前根節點的值 nc6 二叉樹的最大路徑和 思路1 遞迴樹的節點 思路2 層序遍歷 nc8 二叉樹根節點到葉子節點和為指定值的路徑 思路 樹的深度優先遍歷dfs nc9 二叉樹中是否...
leetcode題目 翻轉二叉樹
翻轉一棵二叉樹。示例 輸入 4 27 13 69輸出 4 72 96 31備註 這個問題是受到 max howell 的 原問題 啟發的 谷歌 我們90 的工程師使用您編寫的軟體 homebrew 但是您卻無法在面試時在白板上寫出翻轉二叉樹這道題,這太糟糕了。樹的結構 description aut...