給定乙個有相同值的二叉搜尋樹(bst),找出 bst 中的所有眾數(出現頻率最高的元素)。
假定 bst 有如下定義:
結點左子樹中所含結點的值小於等於當前結點的值
結點右子樹中所含結點的值大於等於當前結點的值
左子樹和右子樹都是二叉搜尋樹
例如:
給定 bst [1,null,2,2],1\
2/2返回[2].
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
}return result;
}//中序遍歷二叉樹,統計各個數字出現的次數
void
dfs(treenode* root)
dfs(root-
>left)
; maxcnt =
max(maxcnt,
++numcntmap[root-
>val]);
//更新出現次數最多的次數
高階:充分利用二叉搜尋樹中序遍歷為遞增序列的特性,在中序遍歷的同時進行眾數的判定。(額外空間複雜度為o(1))
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
//中序遍歷二叉樹,lastnum中序遍歷前乙個數字,cnt為前乙個數字出現的次數
void
dfs(treenode* root,
int&lastnum,
int&cnt)
//第一步:遍歷左子樹
dfs(root-
>left, lastnum, cnt)
;//第二步:訪問根節點
if(lastnum == root-
>val)
else
else
if(result.
size()
==0||(result.
back()
!= lastnum && maxcnt == cnt)
)//更新lastnum以及對應的cnt
lastnum = root-
>val;
cnt =1;
}//遍歷右子樹
LeetCode 二叉搜尋樹中的搜尋
給定二叉搜尋樹 bst 的根節點和乙個值。你需要在bst中找到節點值等於給定值的節點。返回以該節點為根的子樹。如果節點不存在,則返回 null。例如,給定二叉搜尋樹 4 2 7 1 3 和值 2 你應該返回如下子樹 2 1 3 在上述示例中,如果要找的值是 5,但因為沒有節點值為 5,我們應該返回 ...
leetcode 二叉樹 驗證二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 1 3 輸出 true 示例 2 輸入 5 1 4 3 6 輸出 false 解釋 ...
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...