判斷是否爲排序二叉樹BST(非遞歸算法)

題目描述

請實現一個函數,檢查一棵二叉樹是否爲二叉查找樹。

給定樹的根結點指針TreeNode* root,請返回一個bool,代表該樹是否爲二叉查找樹。

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Checker {
public:
	bool checkBST(TreeNode* root)
   {
	stack<TreeNode*>tmpStack;
	TreeNode* pNode=root;
	int minVal=-1000;//初始化一個最小值;
	if (root==NULL)
	{
			return 1;//空樹是二叉排序樹;
	}
	else
	{
		while(pNode||!tmpStack.empty())
		{
		  while(pNode)
			{
				tmpStack.push(pNode);//左孩子入棧;	
				pNode=pNode->left;
			}
			if (!tmpStack.empty())
			{
				if (minVal>tmpStack.top()->val)
				{
					return 0;
				}
				minVal=tmpStack.top()->val;
				pNode=tmpStack.top()->right;
				tmpStack.pop();//出棧;
			}
		}
		return 1;
	}
  }
};


發佈了41 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章