【数据结构和算法】中序线索化二叉树

 详细了解请参考https://blog.csdn.net/UncleMing5371/article/details/54176252

下面介绍的是我对中序化线索化二叉树理解,我会用尽量简洁语言描述关键步骤。

1.涉及到二叉树因此遍历,递归少不了,先确定递归终止条件,这里是当前节点代入线索化方法node.thread();发现自己为null,则return即可。

2.由于是中序遍历,即先处理左子树,再处理自身,再再处理右子树。详情见下图

以下是核心实现代码: 

public void thread(ThreadedNode node) {
    	//递归结束条件
		if(node == null) {
			return;
		}
		//处理左子树
		thread(node.leftNode);
		//处理节点自身
		//处理前驱
		if(node.leftNode == null) {
			//设置指针指向前驱节点
			node.leftNode = pre;
			//改变节点类型,为指向前驱
			node.leftType = 1;
		}
		//处理后继
		if(pre != null && pre.rightNode == null) {
			//设置前驱节点指针指向当前节点
			pre.rightNode = node;
			//改变节点类型,为指向后继(相对来说)
			pre.rightType = 1;
		}
		
		//每处理一个节点,当前节点是下一个节点的前驱节点
		pre = node;
		//处理右子树
		thread(node.rightNode);
		
	}

猜你喜欢

转载自blog.csdn.net/zzf_forgot/article/details/88957565