• 二叉树的深度和宽度


    // 求二叉树的深度和宽度.cpp : 定义控制台应用程序的入口点。
    #include "stdafx.h"
    #include <iostream>
    #include <queue>
    using namespace std;
    
    struct BTNode
    {
    	char m_value;
    	BTNode *m_left;
    	BTNode *m_right;
    };
    
    //先序创建二叉树
    void CreatBTree(BTNode *&root)
    {	
    	char nValue = 0;
    	cin >> nValue;
    	if ('#' == nValue)
    	{
    		return;
    	}
    	else
    	{
    		root = new BTNode();
    		root->m_value = nValue;
    		CreatBTree(root->m_left);
    		CreatBTree(root->m_right);
    	}	
    }
    
    //求二叉树的深度
    int GetDepth(BTNode *pRoot)
    {
    	if (pRoot == NULL)
    	{
    		return 0;
    	}
    
    	// 	int nLeftLength = GetDepth(pRoot->m_left);
    	// 	int nRigthLength = GetDepth(pRoot->m_right);
    	// 	return nLeftLength > nRigthLength ? (nLeftLength + 1) : (nRigthLength + 1);
    
    	return GetDepth(pRoot->m_left) > GetDepth(pRoot->m_right) ? 
    		(GetDepth(pRoot->m_left) + 1) : (GetDepth(pRoot->m_right) + 1);
    }
    
    //求二叉树的宽度
    int GetWidth(BTNode *pRoot)
    {
    	if (pRoot == NULL)
    	{
    		return 0;
    	}
    
    	int nLastLevelWidth = 0;//记录上一层的宽度
    	int nTempLastLevelWidth = 0;
    	int nCurLevelWidth = 0;//记录当前层的宽度
    	int nWidth = 1;//二叉树的宽度
            queue<BTNode *> myQueue;
    	myQueue.push(pRoot);//将根节点入队列
    	nLastLevelWidth = 1;	
    	BTNode *pCur = NULL;
    
    	while (!myQueue.empty())//队列不空
    	{
    		nTempLastLevelWidth = nLastLevelWidth;
    		while (nTempLastLevelWidth != 0)
    		{
                pCur = myQueue.front();//取出队列头元素
    			myQueue.pop();//将队列头元素出对
    
    			if (pCur->m_left != NULL)
    			{
    				myQueue.push(pCur->m_left);
    			}
    
    			if (pCur->m_right != NULL)
    			{
    				myQueue.push(pCur->m_right);
    			}
    
    			nTempLastLevelWidth--;
    		}
    
    		nCurLevelWidth = myQueue.size();
    		nWidth = nCurLevelWidth > nWidth ? nCurLevelWidth : nWidth;
    		nLastLevelWidth = nCurLevelWidth;
    	}
    
    	return nWidth;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	BTNode *pRoot = NULL;	
    	CreatBTree(pRoot);
        cout << "二叉树的深度为:" << GetDepth(pRoot) << endl;
    	cout << "二叉树的宽度为:" << GetWidth(pRoot) << endl;	
    	system("pause");
    	return 0;
    }
    

      

  • 相关阅读:
    Saltstack自动化操作记录(1)-环境部署
    Centos下堡垒机Jumpserver V3.0环境部署完整记录(1)-安装篇
    Centos7修改默认网卡名(改为eth0)以及网卡启动报错RTNETLINK answers: File exists处理
    Python下操作Memcache/Redis/RabbitMQ说明
    libsm6 & libgtk lost (QQ + WPS: Ubuntu)
    Android中View绘制优化
    Android ListView 几个重要属性
    Android Layout_weight 属性
    Java关键字final、static使用总结
    Android 事件
  • 原文地址:https://www.cnblogs.com/Vae1990Silence/p/4830625.html
Copyright © 2020-2023  润新知