LeetCode Populating Next Right Pointers in Each Node

这题很有新意,刚开始想到后序遍历,可是对于给的例子5和6之间怎么连接呢?无论怎么遍历5和6之间都隔好几个数,递归引用传参数的方法肯定不行,题中又说常量的空间,对于完全二叉树最多也不过64层吧,所以每一层设定一个指针用于建立连接。传递指针数组不太容易,用了全局变量解决。如下:

// LeetCode_PopulatingNextRightPointers.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
using namespace std;

struct TreeLinkNode {
	  int val;
	  TreeLinkNode *left, *right, *next;
	  TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}
	 };
TreeLinkNode* layers[64];
void preOrderLayer(TreeLinkNode *root,int layer)//,TreeLinkNode *&layers
{
	if (layers[layer]==NULL)
	{
		layers[layer] = root;
	}
	else
	{
		layers[layer]->next = root;
		layers[layer] = root;
	}
	if(root->left)
		preOrderLayer(root->left,layer+1);
	if(root->right)
		preOrderLayer(root->right,layer+1);
}

void connect(TreeLinkNode *root) {
	if(root==NULL)
		return ;

	for (int i=0;i<64;i++)
		layers[i] = NULL;
	int layer = 0;
	preOrderLayer(root,layer);
	for (int i=0;i<64&&layers[i]!=NULL;i++)
	{
		layers[i]->next = NULL;
	}
}
int _tmain(int argc, _TCHAR* argv[])
{
	TreeLinkNode *pa = new TreeLinkNode(1);  
	TreeLinkNode *pb = new TreeLinkNode(2);  
	TreeLinkNode *pc = new TreeLinkNode(3);  
	TreeLinkNode *pd = new TreeLinkNode(4);//TreeLinkNode *pd = NULL;//  
	TreeLinkNode *pe = new TreeLinkNode(5);  
	TreeLinkNode *pf = new TreeLinkNode(6);  
	TreeLinkNode *pg = new TreeLinkNode(7);  
	pa->left = pb;  
	pa->right = pc;  
	pb->left = pd;  
	pb->right = pe;  
	pc->left = pf;  
	pc->right = pg; 
	connect(pa);
	system("pause");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值