題目
給定一顆二叉樹,已知其中所有節點的值都不一樣,找到含有節點最多的二叉搜尋樹,並返回頭節點。
注:乙個二叉樹的子樹的葉節點必須是該二叉樹的葉節點。
解答: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...