关闭

充实二叉树横向指针(算法)

237人阅读 评论(0) 收藏 举报
分类:

给定一个二叉树,每个结点除了有左右节点以外,还有一个next  节点。初始的时候,next 为null ,现在要求充实next,使其指向其右边的节点。如果没有右边的节点,那么设置为null.要求使用常数级空间。给出的二叉树是完全二叉树,即每个节点要么没有子节点,要么有两个,而且所有叶节点都在同一层上、

1,按层遍历完全二叉树,记录每一层第一个需要遍历的节点。通过观察,我们知道,下一层的第一个节点是本层下一个节点的左子树。

2,把属于同一父节点的左右子树连接起来。

3,连接不属于同一节点的临近节点,即跨子树连接,我们可以通过父节点的next 节点获取一下个父节点,那么该节点的左节点就是临近节点。


public void connectTree(TreeLinkNode root)
{	
	TreeLinkNode currlevel = root;
	while(currlevel != null)
	{
		TreeLinkNode across = currlevel;
		while(across != null)
		{
			if(across.left != null)
				across.left.next = across.right;
			if(across.right != null && across.next != null)
				across.right.next = across.next.left;
			across = across.next;
		}
		currlevel = currlevel.left;
	}
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:19876次
    • 积分:1100
    • 等级:
    • 排名:千里之外
    • 原创:46篇
    • 转载:7篇
    • 译文:48篇
    • 评论:1条
    文章分类
    最新评论