亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? treeinfo.cpp

?? Resource editor base speadrum Chinese mobile
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

        if(pPrev->pPrev == NULL)
        {
            pNode->pParent->pChild = pNode;      
        }
        else
        {
            pPrev->pPrev->pNext = pNode;
        }   

        pPrev->pNext  = pNext;
        pPrev->pPrev  = pNode;
    }

    return TRUE;
}

// 拷貝當前節點(當前節點如有子節點,則包括子節點)。
// 返回:被拷貝的節點地址(重新分配的),成功 非NULL;失敗 NULL
// 注意:各節點是重新NEW出來的,使用時應不應忘記Remove
PTREENODE CTreeInfo::CopyNode( PCTREENODE pcNode )
{
    _ASSERTE( pcNode != NULL );

    PTREENODE pNew  = MallocNode();
	if(pNew == NULL)
        return NULL;
   
    memcpy(pNew, pcNode, sizeof(TREE_NODE));
    pNew->pParent = NULL;
    pNew->pChild  = NULL;
    pNew->pPrev   = NULL;
    pNew->pNext   = NULL;

	PTREENODE pRet  = NULL;
    PTREENODE pPrev = NULL;
    for(PCTREENODE pCur = pcNode->pChild; pCur != NULL; pCur = pCur->pNext)   
    {  
        pRet = CopyNode(pCur);
        if(pRet != NULL)
        {
            // the first child
            if(pCur->pPrev == NULL)
            {
                pNew->pChild  = pRet;
                pRet->pParent = pNew;
                pPrev         = pRet;
            }
            else
            {
                // Not the first child
                _ASSERTE( pPrev != NULL );

                pRet->pParent = pNew;
                pRet->pPrev   = pPrev;
                pPrev->pNext  = pRet;
                pPrev         = pRet;
            }
        }
        else
        {
            break;
        }
    }

    return pNew;    
}

// 將給定的節點孤立出來
// 注意:需要將兄弟節點連接起來
void CTreeInfo::IsolateNode( PTREENODE pNode )
{
    PTREENODE pCur    = pNode;
    PTREENODE pParent = pCur->pParent;
    PTREENODE pPrev   = pCur->pPrev;
    PTREENODE pNext   = pCur->pNext;
    
    if(pPrev != NULL)
    {
        pPrev->pNext = pNext;
    }
    else
    {
        if(pParent != NULL)
        {
            pParent->pChild = pNext;
        }
    }
    
    if(pNext != NULL)
    {
        pNext->pPrev = pPrev;
    }  

    pNode->pParent = NULL;
}

// 獲取給定節點的子節點的層數(有幾層子節點),不包含本身。
// 0說明無子節點,1說明有1層子節點,2說明有兩層子節點...
UINT CTreeInfo::GetLevelCount( PCTREENODE pcNode ) const
{
    _ASSERTE( pcNode != NULL );
    
    if( pcNode->pChild == NULL )    
        return 0;
   
    UINT uMaxLevel = 0;
    
    for ( PCTREENODE pCur = pcNode->pChild; pCur != NULL; pCur = pCur->pNext )   
    {  
        UINT uLevel = GetLevelCount( pCur );
        if ( uLevel > uMaxLevel ) 
        {  
            uMaxLevel = uLevel;  
        }
    }

    return uMaxLevel + 1;
}

// 獲取相對于當前菜單某一層(某一代)所有菜單的數量
// pcNode:當前給定節點, nLevel: 要訪問的層數,子節點的層數為1,孫子節點的層數為2...
// 返回:給定層的菜單的數量
UINT CTreeInfo::GetCountInLevel( PCTREENODE pcNode, int nLevel ) const
{
    _ASSERTE( pcNode != NULL && nLevel >= 0 ); 

    if(pcNode->pChild == NULL || nLevel == 0)
    {
        return 0;
    }

    UINT uLevelCount = 0;
   
    for ( PCTREENODE pCur = pcNode->pChild; pCur != NULL; pCur = pCur->pNext )   
    {  
        if(1 == nLevel)
        {
            uLevelCount++;
        }
        else
        {
            uLevelCount += GetCountInLevel(pCur, nLevel - 1);
        }
    }

    return uLevelCount;
}

// 獲取當前節點,給定層數,給定索引的節點。說明:這些節點的索引順序
// 按照在節點樹中的順序由上到下排列。
// pcNode:給定的節點, nLevel:層數, nIndex:給定層上節點的索引
// 返回:NULL 給定信息無對應的節點, 非NULL 獲取的節點
PTREENODE CTreeInfo::GetNodeInLevel( PCTREENODE pcNode, int nLevel, int nIndex ) const
{
    _ASSERTE(pcNode != NULL); 
	_ASSERTE( nLevel >= 0 && nIndex >= 0 );
  
    return GetLevelInternalUse(pcNode, nLevel, nIndex);
}

PTREENODE CTreeInfo::GetLevelInternalUse(PCTREENODE pcNode, int nLevel, int &nIndex) const
{
    _ASSERTE(pcNode != NULL); 

    if(pcNode->pChild == NULL || nLevel == 0)
        return NULL;

    PTREENODE pRet = NULL;
    for ( PTREENODE pCur = pcNode->pChild; pCur != NULL; pCur = pCur->pNext)   
    {  
        if(1 == nLevel)
        {
            if(0 == nIndex)
                return pCur;
            else
                nIndex--;
        }
        else
        {
            pRet = GetLevelInternalUse(pCur, nLevel - 1, nIndex);
            if(pRet != NULL)
                break;
        }
    }
    
    return pRet;
}

// 獲取當前給定節點的所有子孫節點的數量(包括本身)
UINT CTreeInfo::GetAllPosteritiesCount( PCTREENODE pcNode ) const
{
    _ASSERTE( pcNode != NULL );
    
    if( pcNode->pChild == NULL )    
        return 1;
    
    UINT uMaxCount = 1;
    
    for( PCTREENODE pCur = pcNode->pChild; pCur != NULL; pCur = pCur->pNext )   
    {  
        uMaxCount += GetAllPosteritiesCount( pCur );
    }

    return uMaxCount;
}

// 給定的節點(lpcNode)是否是lpcParent的子孫節點(包括本身)
BOOL CTreeInfo::IsPosterity(PCTREENODE pcParent, PCTREENODE pcNode) const
{
    _ASSERTE(pcParent != NULL);
    _ASSERTE(pcNode != NULL);

    if( pcParent == pcNode )
        return TRUE;

    PCTREENODE pChild = pcParent->pChild;
    for(; pChild != NULL; pChild = pChild->pNext)
    {
        if( IsPosterity(pChild, pcNode) )
            return TRUE;
    }

    return FALSE;
}

void CTreeInfo::RemoveNodeInternalUse( PTREENODE pNode )
{
    if( NULL == pNode )
		return;
	
	PTREENODE pChild = pNode->pChild;
	while ( NULL != pChild )
	{
		PTREENODE pNext = pChild->pNext;
        	
		RemoveNode( pChild );
                
		pChild = pNext;
	}
	
	delete pNode;
}

// 刪除當前節點(當前節點如有子節點,則包括子節點)
// 注意:需要對上下的指向節點進行處理
void CTreeInfo::RemoveNode(  PTREENODE lpNode )
{
    if(lpNode != NULL) 
	{
		IsolateNode(lpNode);
    
		RemoveNodeInternalUse(lpNode);
	}
}

// 此函數直接調用RemoveNode(PTREENODE lpNode),將根節點作為參數傳入即可。
void CTreeInfo::RemoveAll()  
{
    if(m_pRoot != NULL)
    {
        RemoveNode(m_pRoot);
        m_pRoot = NULL;
    }
}

void CTreeInfo::ZeroNode( PTREENODE pNode ) 
{ 
    if(pNode != NULL) 
    {
        pNode->pChild  = NULL;
        pNode->pNext   = NULL;
        pNode->pParent = NULL;
        pNode->pPrev   = NULL;
    }
}

//////////////////////////////////////////////////////////////////////
// virtual fun 需要在派生類中重新實現
//////////////////////////////////////////////////////////////////////
// 從內存中分配一個新節點,此函數應在派生類中重新實現,以便獲取實際節點。
PTREENODE CTreeInfo::MallocNode( void ) 
{ 
	return new TREE_NODE; 
}

void CTreeInfo::FreeNode( PTREENODE pNode )
{
    delete pNode;
}
//////////////////////////////////////////////////////////////////////
// 文件操作(不再提供)
//////////////////////////////////////////////////////////////////////

// 將指定節點及其子孫節點保存到文件,此函數會調用GetNodeSize來獲取節點的
// 大小。
//BOOL CTreeInfo::SaveToFile( PCTREENODE pcNode, FILE * pFILE )
//{
    // 此函數應在派生類中實現
//    _ASSERTE( 0 );

//	return FALSE;
//}

// 從文件中讀取所有節點信息,并返回鏈表中第一個節點的指針,
// 注意此函數會調用MallocNode來分配新節點。
//PTREENODE CTreeInfo::ReadFromFile( FILE * pFILE )
//{
    // 此函數應在派生類中實現
//    _ASSERTE( 0 );

//	return NULL;
//}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情在线一区二区| 日韩精品综合一本久道在线视频| 久久精品72免费观看| 亚洲国产成人高清精品| 亚洲国产日韩精品| 一区二区免费在线播放| 亚洲女人小视频在线观看| 亚洲欧美日本韩国| 亚洲一区二区影院| 亚洲午夜精品久久久久久久久| 一区二区在线观看视频| 亚洲黄色性网站| 午夜久久电影网| 久久99国产精品免费网站| 精品一区二区三区在线观看国产| 久久成人免费日本黄色| 国产精品亚洲一区二区三区妖精| 国产sm精品调教视频网站| 成人毛片视频在线观看| 日本韩国欧美国产| 3d动漫精品啪啪| 久久亚洲精精品中文字幕早川悠里 | 成人美女视频在线观看| 一本大道久久a久久精品综合| 欧美日韩高清在线| 精品国产精品一区二区夜夜嗨| 久久久久亚洲蜜桃| 日韩理论片一区二区| 日韩成人免费看| 国产成人av影院| 欧洲亚洲国产日韩| 日韩精品一区二| 成人免费视频在线观看| 天天综合天天综合色| 国产不卡视频在线观看| 欧美中文一区二区三区| 久久只精品国产| 一区二区三区毛片| 国产成人精品一区二| 欧美三级三级三级| 中文字幕的久久| 日韩黄色片在线观看| 波多野结衣欧美| 欧美一激情一区二区三区| 国产精品全国免费观看高清| 亚洲国产另类av| 懂色av中文字幕一区二区三区| 欧美性淫爽ww久久久久无| 26uuu欧美| 香蕉成人啪国产精品视频综合网| 成人激情免费电影网址| 日韩欧美亚洲一区二区| 中文字幕视频一区| 国产精一品亚洲二区在线视频| 欧美日韩一区二区三区四区| 国产精品久久三| 久久国产精品一区二区| 欧美日韩亚洲综合在线| 国产精品传媒在线| 国产精品自拍网站| 日韩欧美在线网站| 亚洲一本大道在线| 91传媒视频在线播放| 国产午夜精品在线观看| 六月丁香婷婷久久| 337p亚洲精品色噜噜| 性欧美疯狂xxxxbbbb| 在线观看日韩国产| 一区二区三区免费观看| 一本久久a久久免费精品不卡| 中文字幕在线不卡一区二区三区| 国产福利一区在线| 国产偷v国产偷v亚洲高清| 极品少妇一区二区| 久久久不卡影院| 国模一区二区三区白浆| 久久久精品一品道一区| 国产精品69毛片高清亚洲| 欧美成人a视频| 国产一区二区91| 国产亚洲午夜高清国产拍精品| 狠狠色2019综合网| 久久欧美一区二区| 国产在线精品一区二区三区不卡| 日韩欧美国产高清| 日韩精品成人一区二区在线| 在线看日本不卡| 日本欧美在线看| 91视频在线观看免费| 欧美电影精品一区二区| 日韩高清国产一区在线| 欧美日韩一二三区| 国产精品私人影院| 色噜噜狠狠色综合欧洲selulu| 国产精品久久久久久久久免费相片| 免费av网站大全久久| 91精品国产综合久久婷婷香蕉| 亚洲视频图片小说| 91麻豆视频网站| 精品国产免费视频| 97久久精品人人爽人人爽蜜臀| 国产校园另类小说区| 成人av在线一区二区| 中文字幕一区在线观看视频| 91蜜桃婷婷狠狠久久综合9色| 国产精品久久久久久户外露出| 精品一区二区三区视频 | 国产福利一区二区| 精品国产乱码久久久久久牛牛| 精品一区二区免费在线观看| 欧美精品一区二区三| 国产精品综合一区二区三区| 国产精品久久久久天堂| 99re6这里只有精品视频在线观看| 亚洲天堂a在线| 欧美三级电影网| 青青草97国产精品免费观看 | 亚洲激情综合网| 欧美三级欧美一级| 青青青爽久久午夜综合久久午夜 | 亚洲欧洲在线观看av| 99re成人在线| 国内外成人在线| 亚洲青青青在线视频| 欧美年轻男男videosbes| 国产在线精品国自产拍免费| 亚洲人吸女人奶水| 日韩精品一区二区三区三区免费| 色视频欧美一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 欧美国产激情二区三区| 欧美日韩国产大片| 高清不卡在线观看| 亚洲欧美日韩在线| 欧美激情一区二区三区在线| 欧美丝袜自拍制服另类| 国产91丝袜在线播放0| 亚洲午夜久久久久久久久电影院| 日韩亚洲欧美高清| 欧美精品xxxxbbbb| 91视频精品在这里| 国产一区二区美女| 亚洲一卡二卡三卡四卡无卡久久| xfplay精品久久| 欧美精品日韩一本| 91香蕉视频污| 国产福利不卡视频| 日韩高清在线电影| 一区二区三区四区国产精品| 久久久久久久久97黄色工厂| 在线观看www91| 91成人在线观看喷潮| 国产成a人无v码亚洲福利| 日韩综合小视频| 久久综合九色欧美综合狠狠 | 欧美精品xxxxbbbb| 国产福利91精品| 懂色av中文字幕一区二区三区| 日本三级亚洲精品| 亚洲欧美激情一区二区| 中文字幕免费不卡| 欧美激情资源网| 精品美女一区二区| 亚洲精品一区二区三区精华液| 欧美美女视频在线观看| 欧美性受xxxx黑人xyx| 91啪亚洲精品| 色综合久久久网| 国v精品久久久网| 成人午夜伦理影院| 99久久国产综合精品女不卡| 粉嫩av一区二区三区在线播放| 国产馆精品极品| 一本一道综合狠狠老| 91蜜桃在线观看| 欧美三片在线视频观看| 欧美日韩国产免费| 欧美天堂一区二区三区| 欧美一级电影网站| 久久老女人爱爱| 欧美国产1区2区| 亚洲欧美综合在线精品| 亚洲欧洲日本在线| 日韩美女啊v在线免费观看| 一个色妞综合视频在线观看| 天天av天天翘天天综合网色鬼国产 | 亚洲已满18点击进入久久| 亚洲一区二区av电影| 狠狠狠色丁香婷婷综合久久五月| 福利电影一区二区三区| 97久久超碰精品国产| 欧美性猛片aaaaaaa做受| 在线成人免费视频| 日本一区二区三区在线观看| 亚洲精品videosex极品| 日本va欧美va精品发布| 国产精品亚洲一区二区三区在线| 成人丝袜高跟foot| 91精品国产日韩91久久久久久| 久久精品综合网|