zoukankan      html  css  js  c++  java
  • 二叉树的下一个结点

    题目描述:

    给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。
    注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
    

      因为是中序遍历,所有要找的这个父结点,肯定有这样的特征:

    当前结点所在的子树一定是某个根结点的左子树。并且当前结点是该左子树的最右结点。
    

      所以算法设计:

    如果当前结点有右子树,那么找右子树的最左结点。
    如果当前结点没有右子树,那么找一个合适的父结点。
    

      所以代码实现:

    TreeLinkNode* GetNext(TreeLinkNode* pNode)
    {
    	TreeLinkNode *cur = pNode;
    	if(cur->right != NULL)
    	{
    		cur = cur->right;
    		while(cur->left != NULL)
    		{
    			cur = cur->left;
    		}
    	}//if
    	else
    	{
    		TreeLinkNode *tmp = cur->next;
    		if(tmp == NULL)
    			return NULL;
    		while(tmp != NULL && tmp->left != cur)
    		{
    			cur = tmp;
    			tmp = tmp->next;
    		}
    		cur = tmp;
    	}
    	return cur;
    }
    

      

  • 相关阅读:
    新的起点,虽半步即天涯
    自定义函数
    冒泡排序 数字去重
    for 循环练习题
    for 循环练习题(2)
    for 循环 乘法口诀表
    js基础标签用法
    网页格式布局 流式布局
    样式表属性
    框架
  • 原文地址:https://www.cnblogs.com/stemon/p/4762292.html
Copyright © 2011-2022 走看看