題目
給定一顆二叉樹,已知其中所有節點的值都不一樣,找到含有節點最多的二叉搜尋樹,並返回頭節點。
注:乙個二叉樹的子樹的葉節點必須是該二叉樹的葉節點。
解答:以節點root為頭的樹中,最大的二叉搜尋樹只可能來自以下兩種情況。
1.如果來自root左子樹上的最大st以root.left為頭,來自root右子樹上的最大st以root.right 為頭,且左邊bst的最大值小於root.val,且右邊bst的最小值大於root.val。那麼,
以節點root為根節點的正棵樹都是st。
2.不滿足條件1的話,以root為根的樹的最大st是來自左子樹的最大st和右子樹的最大st中包含節點樹較多的那乙個。
通過以上分析,求解過程如下:
1.整體過程是二叉樹的後序遍歷。
2.用recorder記錄相關資料。
public class solution
public treenode poseorder(treenode root,int recorder)
treenode left=postorder(root.left,recorder);
int lsize=recorder[0];
int lmax=recorder[1];
int lmin=recorder[2];
treenode right=postorder(root.right,recorder);
int rsize=recorder[0];
int rmax=recorder[1];
int rmin=recorder[2];
if(root.left == left&&root.right == right&&root.val > lmax&&root.val < rmin)
else
else}}
}
找到二叉樹中的最大搜尋二叉樹
題目 給定一顆二叉樹,已知其中所有節點的值都不一樣,找到含有節點最多的二叉搜尋樹,並返回頭節點。注 乙個二叉樹的子樹的葉節點必須是該二叉樹的葉節點。解答 1.後續遍歷 2.每次記錄下最小值,最大值,節總數。如果root左右節點符合,則總數相加後,返回此根節點 否則返回左右節點中節點數最多的節點。輸入...
最大二叉樹
題目大意 總是按照當前陣列或者子陣列中的元素值的最大值作為根節點,依次建立一顆二叉樹。輸入 nums 3 2,1 6,0 5 輸出 6,3,5,null,2,0,null,null,1 解釋 遞迴呼叫如下所示 3,2,1,6,0,5 中的最大值是 6 左邊部分是 3,2,1 右邊部分是 0,5 3,...
樹 二叉樹 二叉搜尋樹
給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...