// 找出二叉树中最长的连续白色节点的长度.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <vector>
using namespace std;
typedef enum _color
{
COLOR_WHITE = 0,
COLOR_BLACK
}
COLOR;
typedef struct _node
{
COLOR color;
struct _node *left;
struct _node *right;
}
Node;
void findLWInternal(Node* root, Node **ppDestNode, int &curMaxLen, std::vector<Node *> *pVector)
{
if (root == NULL)
return;
Node *pCurNode = root;
if (pCurNode->color == COLOR_WHITE)
{
if (pVector != NULL)
{
pVector->push_back(pCurNode);
if (pVector->size() > curMaxLen)
{
*ppDestNode = pVector->at(0);
curMaxLen = pVector->size();
}
findLWInternal(root->left, ppDestNode, curMaxLen, pVector);
findLWInternal(root->right, ppDestNode, curMaxLen, pVector);
pVector->pop_back();
}
else
{
std::vector<Node *> vector;
vector.push_back(pCurNode);
if (curMaxLen == 0)
{
*ppDestNode = pCurNode;
curMaxLen = 1;
}
findLWInternal(root->left, ppDestNode, curMaxLen, &vector);
findLWInternal(root->right, ppDestNode, curMaxLen, &vector);
vector.pop_back();
}
}
else
{
findLWInternal(root->left, ppDestNode, curMaxLen, NULL);
findLWInternal(root->right, ppDestNode, curMaxLen, NULL);
}
}
void findLWInternal2(Node* root, Node **ppCurRoot, Node **ppDestNode, int &curLen, int &maxLen)
{
if (root == NULL)
return;
Node *pCurNode = root;
if (pCurNode->color == COLOR_WHITE)
{
if (curLen == 0)
{
*ppCurRoot = pCurNode;
}
curLen++;
if (curLen > maxLen)
{
maxLen = curLen;
*ppDestNode = *ppCurRoot;
}
findLWInternal2(root->left, ppCurRoot, ppDestNode, curLen, maxLen);
findLWInternal2(root->right, ppCurRoot, ppDestNode, curLen, maxLen);
curLen--;
}
else
{
curLen = 0;
*ppCurRoot = NULL;
findLWInternal2(root->left, ppCurRoot, ppDestNode, curLen, maxLen);
findLWInternal2(root->right, ppCurRoot, ppDestNode, curLen, maxLen);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
查找二叉树中最长的连续白色节点的长度
最新推荐文章于 2023-03-26 08:22:49 发布