找到二叉樹中的最大搜尋二叉樹

2021-07-22 17:51:02 字數 1380 閱讀 9093

題目

給定一顆二叉樹,已知其中所有節點的值都不一樣,找到含有節點最多的二叉搜尋樹,並返回頭節點。

注:乙個二叉樹的子樹的葉節點必須是該二叉樹的葉節點。

解答:1. 後續遍歷

2. 每次記錄下最小值,最大值,節總數。 如果root左右節點符合,則總數相加後,返回此根節點;否則返回左右節點中節點數最多的節點。

輸入: 輸出:

3表示只有5,11,15這三個節點符合

//// main.cpp

// 找到二叉樹中的最大搜尋二叉樹

//// created by zjl on 16/9/14.

//#include #include #include using namespace std;

struct treenode

};treenode* create(vectorvec)

else

t->left = null;

i++;

if(i<= num)

else

t->right = null;

i++;}}

return root;

}treenode* solve(treenode* root, int& mins, int& maxs, int& nums)

int minl = 0, minr = 0, maxl = 0, maxr = 0, numsl = 0, numsr = 0;

int value = root->val;

treenode* rootl = root->left;

treenode* rootr = root->right;

treenode* lroot = solve(root->left, minl, maxl, numsl);

treenode* rroot = solve(root->right, minr, maxr,numsr);

mins = min(minl, value);

maxs = max(maxr, value); //這裡兩個一定要放到下面這些判斷前面

if(lroot == rootl && rroot == rootr && maxl < value && minr > value)

nums = max(numsl, numsr);

return numsl > numsr ? lroot : rroot;

}int main(int argc, const char * argv) ;

treenode* root = create(num);

int mins = 0, maxs = 0, nums = 0;

treenode* res = solve(root, mins, maxs, nums);

cout<

樹 找到二叉樹中的最大二叉搜尋樹

題目 給定一顆二叉樹,已知其中所有節點的值都不一樣,找到含有節點最多的二叉搜尋樹,並返回頭節點。注 乙個二叉樹的子樹的葉節點必須是該二叉樹的葉節點。解答 以節點root為頭的樹中,最大的二叉搜尋樹只可能來自以下兩種情況。1.如果來自root左子樹上的最大st以root.left為頭,來自root右子...

二叉樹問題 找到二叉樹中的最大搜尋二叉子樹

題目 給定一棵二叉樹的頭節點head,已知其中所有節點的值都不一樣,找到含有節點最多的搜尋二叉樹,並返回這棵子樹的頭節點。注意子樹的概念 基本思路 以節點node為頭的樹中,最大的搜尋二叉樹只可能來自以下的兩種情況 node的左子樹和右子樹都是搜尋二叉樹,並且左子樹的最大值小於node,右子樹的最小...

找到二叉樹中符合搜尋二叉樹條件的最大拓撲結構

找到二叉樹中符合搜尋二叉樹條件的最大拓撲結構 給定一棵二叉樹的頭節點 head,已知所有節點的值都不一樣,返回其中最大的 且符合搜尋二叉樹 條件的拓撲結構的節點數。這裡的拓撲結構是指,你可以在二叉樹中任意選擇某些節點,只要這些節 點是連在一起的,都叫做二叉樹的拓撲結構。public static c...