zoukankan      html  css  js  c++  java
  • 找树节点在二叉树中的深度

    /*
    *pRoot接收要检索的树的根节点,pNode是要确认深度的结点
     path存储从根结点到pNode的所有节点,包括了pNode和根节点
    */
    void findPath(BinaryTreeNode *pRoot, BinaryTreeNode *pNode, vector<int> &path){
    	if (pRoot == NULL) return;
    	path.push_back(pRoot->m_nValue);
    	if (pRoot == pNode){
    	//找到了节点,立即返回
    	printf("A path is found:
    ");
    		return;
    	}
    	vector<int>::size_type preSize = path.size();
    	//若在左子树找到pNode,不要释放当前节点,立即返回
    	findPath(pRoot->m_pLeft, pNode, path);
    	//巧妙的利用path的size增加来判断是否找到节点
    	if (preSize < path.size()) return;
    	//若在右子树找到pNode,不要释放当前节点,立即返回
    	findPath(pRoot->m_pRight, pNode, path);
    //巧妙的利用path的size增加来判断是否找到节点
    if (preSize < path.size()) return;
    path.pop_back();
    }

      这题最容易错的是子树找到节点这种情况没有单独讨论,导致path.pop_back()执行,释放当前压入容器节点,产生逻辑错误。

          最后只要把path.size()-1打印出来就是节点的深度了

         从中可以看出递归写法可以简单优雅地把回溯思路表现出来,掌握递归的写法是程序员能力的一种体现。

  • 相关阅读:
    python+selenium之页面元素截图
    selenium八大定位
    http概述之URL与资源
    数组中只出现一次的数字
    数字在排序数组中出现的次数
    把数组排成最小的数
    数组中出现次数超过一半的数字
    调整数组顺序使得奇数位于偶数的前面
    旋转数组的最小值
    二维数组的查找
  • 原文地址:https://www.cnblogs.com/hzmbbbb/p/3889169.html
Copyright © 2011-2022 走看看