判斷二叉樹是否為二叉搜尋樹

2021-08-05 22:20:44 字數 2179 閱讀 3547

剛開始我想的很簡單,覺得只要遞迴判斷左孩子是否小於根節點 右孩子是否大於根節點就行了

//二叉搜尋樹 = 左孩子 < 根結點 && 右孩子  > 根節點

//下面的寫法 錯的!!!!錯的!!!

//二叉樹的判斷應該是左子樹的最大值 小於 根節點 右子樹的最小值大於根節點

bool isvalidbst(treenode *root)

if(root->left !=

null

&& root->left->val > root->val)

if(root->right !=

null

&& root->right->val < root->val)

return isvalidbst(root->left) && isvalidbst(root->right);

}

#include 

#include

using

namespace

std;

struct treenode

};class solution

treenode *buildtree(vector

&inorder, int ileft, int iright, vector

&postorder, int pleft, int pright)

treenode *cur = new treenode (postorder[pright]);

int i = 0;

for(i = ileft; i < inorder.size(); ++i)

}cur->left = buildtree(inorder, ileft, i - 1, postorder, pleft, pleft + i - ileft - 1);

cur->right = buildtree(inorder, i + 1, iright, postorder, pleft + i - ileft, pright - 1);

return cur;

}//前序遍歷輸出

void preorderdisplay(treenode *root)

else

}//方法一

//根據二叉搜尋樹的特點: 二叉搜尋樹的中序遍歷是遞增的 判斷一下就行了

bool isvalidbst1(treenode *root)

vector

res;

inorderdisplay(root, res);

cout

<< endl;

for(int j = 0; j < res.size(); ++j)

for(int i = 1; i < res.size(); ++i)

}return

true;

}//中序遍歷生成序列

void inorderdisplay(treenode *root, vector

& res)

else

} //方法二

//前序遍歷 當前節點的值是左子樹的最大值,同時是右子樹的最小值

bool isvalidbst2(treenode *root)

return isbst_preorder(root, int_min, int_max);

} bool isbst_preorder(treenode *root, int minval, int maxval)

if(root->val < minval || root->val > maxval)

return isbst_preorder(root->left, minval, root->val) && isbst_preorder(root->right, root->val, maxval) ;

}};int main();

vector

postorder = ;

treenode *root = s.buildtree(inorder, postorder);

s.preorderdisplay(root);

bool flag = s.isvalidbst2(root);

if(flag)

else

system("pause");

return

0;}

二叉樹 判斷二叉樹是否為完全二叉樹

問題描述 判斷一棵二叉樹是否為完全二叉樹。知識點 完全二叉樹是指除二叉樹的最後一層外,其他各層的節點數達到最大個數,且最後一層的葉節點從左到右連續存在,只缺右側若干節點。演算法實現 class node is complete binary tree public static boolean is...

判斷該二叉樹是否為搜尋二叉樹和完全二叉樹。

轉向我的部落格位址 題目描述 給定一棵二叉樹,已經其中沒有重複值的節點,請判斷該二叉樹是否為搜尋二叉樹和完全二叉樹。示例1輸入 輸出 true,true 備註 n 500000 其中,判斷搜尋二叉樹,只需要中序遍歷一次,取出值,看是否是遞增即可。判斷是否是完全二叉樹,只需要按層遍歷一次,找到第乙個n...

判斷二叉樹是否為平衡二叉樹

一 線性思維 遍歷每個節點都時候,求左右子樹的深度,如果左右子樹深度相差不超過1,繼續遞迴遍歷左右節點,此種方法會重複遍歷,時間效率不高 is balanced t if t is null return true left treedepth t.left right treedepth t.ri...