博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Populating Next Right Pointers in Each Node
阅读量:6692 次
发布时间:2019-06-25

本文共 2792 字,大约阅读时间需要 9 分钟。

题目一:

Given a binary tree

struct TreeLinkNode {      TreeLinkNode *left;      TreeLinkNode *right;      TreeLinkNode *next;    }

Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL.

Initially, all next pointers are set to NULL.

Note:

  • You may only use constant extra space.
  • You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).

For example,

Given the following perfect binary tree,

1       /  \      2    3     / \  / \    4  5  6  7

After calling your function, the tree should look like:

1 -> NULL       /  \      2 -> 3 -> NULL     / \  / \    4->5->6->7 -> NULL

struct TreeLinkNode {	int val;    TreeLinkNode *left, *right, *next;    TreeLinkNode(int x) : val(x), left(NULL), right(NULL), next(NULL) {}};/* 因为题目说了是全然二叉树。所以假设由节点next不为空的话,那么一定是root -> next -> left */class Solution {public:    void connect(TreeLinkNode *root) {    	if(!root || (root -> left == NULL && root -> right == NULL))return;    	if(root -> left)root -> left -> next = root -> right;    	if(root -> right && root -> next) root -> right -> next = root -> next -> left;    	connect(root -> left);    	connect(root -> right);    }};
题目二:

Follow up for problem "Populating Next Right Pointers in Each Node".

What if the given tree could be any binary tree? Would your previous solution still work?

Note:

  • You may only use constant extra space.

For example,

Given the following binary tree,

1       /  \      2    3     / \    \    4   5    7

After calling your function, the tree should look like:

1 -> NULL       /  \      2 -> 3 -> NULL     / \    \    4-> 5 -> 7 -> NULL
与上面不同之处在于本题的二叉树能够是随意形式的。

因此,对一个节点须要向右找到第一个节点。

对于left。假设right不存在,就在father的next节点去找left/right。依次找下去。

对于right,直接在father的next节点開始找

class Solution {public:    void connect(TreeLinkNode *root) {    	if(!root || (root -> left == NULL && root -> right == NULL))return;	    	TreeLinkNode* p ,*q;    	if(root -> left)    	{    		if(root -> right)root -> left -> next = root -> right;    		else    		{    			q = NULL;    			p = root -> next;    			while(p != NULL)//沿着父亲的next指针一直寻找    			{    				if(p -> left)    				{    					q = p -> left;    					break;    				}    				else if(p -> right)    				{    					q = p -> right;    					break;    				}    				p = p -> next;    			}    			root -> left ->  next = q;    		}    	}    	if(root -> right)    	{    		q = NULL;    		p = root -> next;    		while(p != NULL)    		{    			if(p -> left)    			{    				q = p -> left;    				break;    			}    			else if(p -> right)    			{    				q = p -> right;    				break;    			}    			p = p -> next;    		}    		root -> right -> next = q;    	}    	connect(root -> right);//注意要先构造右子树    	connect(root -> left);    }};

转载地址:http://lucoo.baihongyu.com/

你可能感兴趣的文章
Linux CPU
查看>>
Linux/Centos ntp时间同步,联网情况和无网情况配置
查看>>
初级网络运维工程师比赛题目
查看>>
跨交换机实现vlan实验报告
查看>>
jquery easyui滚动条部分设置介绍
查看>>
cannot find -lxxx问题
查看>>
预防云端开源项目打包 Redis Labs再更改模块
查看>>
超惊人!去年发生的身分外泄安全事件是2017的4倍
查看>>
oracle sqlplus免安装的配置instantclient-basiclite
查看>>
Java开发GUI之选择列表
查看>>
一、分布式商城架构逻辑图
查看>>
机器人是如何完成避障的?机器人避障解决方案解读
查看>>
通过错误堆栈信息和源码分析错误来源
查看>>
C和C++ 读写文件速度问题
查看>>
layer.mobile 弹出框插件(2.0版)
查看>>
C#基础 条件语句、选择语句和循环语句
查看>>
bugzilla安装笔记
查看>>
Hadoop 2.0(YARN/HDFS)学习资料汇总
查看>>
hadoop命令执行hbase应用jar包时的环境变量加载问题
查看>>
awk常用注意事项--awk如何引用外部变量
查看>>