数据结构与算法---树---二叉树的前驱节点、后继节点

前驱节点

何为前驱节点?
前驱节点,指的是以中序遍历,遍历二叉树,某一个节点的前一个节点,被称为其前驱节点。
也就是,某一节点的左子树的右子节点的右子节点的右节点。。。

特殊情况,如果是二叉搜索树,则前驱节点是按从小到大的顺序,比其前面一个节点。

思路:

如果node.left != null;
则循环,node.left.right.right.right…直至为空,则找到了其前驱节点。

如果node.left == null;
如果node.parent == null;则没有前驱
如果node.parent != null;则前驱节点为node.parent.parent.parent…;
终止条件:node在parent的右子树中

public static TreeNode preNode(TreeNode root)
	{
		if(root == null) return null;
		
		TreeNode node = root.left;
		
		if(node != null) {
			while(node.right != null) {
				node = node.right;
			}
			return node;
		}else {
			while(node.parent != null && node == node.parent.left) {
				node = node.parent;
			}
			//来到这里包含两种情况:
			//node.parent == null
			//node = node.parent.right
			
			return node.parent;
		}
	}
	

后继节点

中序遍历的某一节点的后一个节点,被称为后继节点
参照前驱节点,不难写成后继节点

思路:

如果node.right != null;
则循环,node.right.left.left.left…直至为空,则找到了其后继节点。

如果node.right == null;
如果node.parent == null;则没有后继
如果node.parent != null;则后继节点为node.parent.parent.parent…;
终止条件:node在parent的左子树中

public static TreeNode postNode(TreeNode root) {
		if(root == null) return null;
		
		TreeNode node = root.right;
		if(node != null) {
			while(node.left != null)
			{
				node = node.left;
			}
			return node;
		}else {
			while(node.parent != null && node == node.parent.right)
			{
				node = node.parent;
			}
			
			return node.parent;
		}
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值