zoukankan      html  css  js  c++  java
  • 求二叉树的深度

    题目:输入一棵二叉树的根节点,求该树的深度。从根节点到叶子结点一次经过的结点形成树的一条路径,最长路径的长度为树的深度。根节点的深度为1。
    解体思路:
    1. 如果根节点为空,则深度为0,返回0,递归的出口
    2. 如果根节点不为空,那么深度至少为1,然后我们求他们左右子树的深度,
    3. 比较左右子树深度值,返回较大的那一个
    4. 通过递归调用
    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    
    struct BinaryTreeNode
    {
    	int m_nValue;
    	BinaryTreeNode* m_pLeft;
    	BinaryTreeNode* m_pRight;
    };
    
    //创建二叉树结点
    BinaryTreeNode* CreateBinaryTreeNode(int value)
    {
    	BinaryTreeNode* pNode=new BinaryTreeNode();
    	pNode->m_nValue=value;
    	pNode->m_pLeft=NULL;
    	pNode->m_pRight=NULL;
    	return pNode;
    }
    
    //连接二叉树结点
    void ConnectTreeNodes(BinaryTreeNode* pParent,BinaryTreeNode* pLeft,BinaryTreeNode* pRight)
    {
    	if(pParent!=NULL)
    	{
    		pParent->m_pLeft=pLeft;
    		pParent->m_pRight=pRight;
    	}
    }
    
    //求二叉树深度
    int TreeDepth(BinaryTreeNode* pRoot)//计算二叉树深度
    {
    	if(pRoot==NULL)//如果pRoot为NULL,则深度为0,这也是递归的返回条件
    		return 0;
    	//如果pRoot不为NULL,那么深度至少为1,所以left和right=1
    	int left=1;
    	int right=1;
    	left+=TreeDepth(pRoot->m_pLeft);//求出左子树的深度
    	right+=TreeDepth(pRoot->m_pRight);//求出右子树深度
    
    	return left>right?left:right;//返回深度较大的那一个
    }
    
    void main()
    {
    	//            1
    	//         /      \
    	//        2        3
    	//       /\         \
    	//      4  5         6
    	//           /
    	//        7
    	//创建树结点
    	BinaryTreeNode* pNode1 = CreateBinaryTreeNode(1);
    	BinaryTreeNode* pNode2 = CreateBinaryTreeNode(2);
    	BinaryTreeNode* pNode3 = CreateBinaryTreeNode(3);
    	BinaryTreeNode* pNode4 = CreateBinaryTreeNode(4);
    	BinaryTreeNode* pNode5 = CreateBinaryTreeNode(5);
    	BinaryTreeNode* pNode6 = CreateBinaryTreeNode(6);
    	BinaryTreeNode* pNode7 = CreateBinaryTreeNode(7);
    
    	//连接树结点
    	ConnectTreeNodes(pNode1, pNode2, pNode3);
    	ConnectTreeNodes(pNode2, pNode4, pNode5);
    	ConnectTreeNodes(pNode3, NULL,   pNode6);
    	ConnectTreeNodes(pNode5, pNode7,  NULL );
    
    	int depth=TreeDepth(pNode1);
    	cout<<depth<<endl;
    
    	system("pause");
    }


     

     
  • 相关阅读:
    javascript:void(0)是什么意思 天高地厚
    C#开发 WinForm中窗体显示和窗体传值相关知识
    c#在WinForm中重写ProgressBar控件(带%的显示)
    flash在C#中的应用
    c# winform 关于DataGridView的一些操作
    winform中输入数据的验证
    RadioButton和CheckBox
    Manifest文件的配置
    简单程序用于熟悉Activity生命周期
    Activity的生命周期
  • 原文地址:https://www.cnblogs.com/byfei/p/3112374.html
Copyright © 2011-2022 走看看