寻找二叉树的下一个节点

版权声明:be the one ~you will be the one~~ https://blog.csdn.net/Hqxcsdn/article/details/87722051

给出二叉树,以及一个节点 ,按照 中序遍历 找出其下一个节点

1.首先要理解中序遍历。

中序遍历是对于二叉树按照先左节点,然后 根节点,再 右节点的顺序进行排序
所以 对于其给定的节点 ,要考虑它现在的所处位置

2.对于不同位置进行处理

1.如果其有右节点,那么 其有右节点为其下一个节点
2.如果没有右子节点,那么 a.如果它是其父节点的左节点,那么其父节点就是下一个节点 b. 若不是,则往上回溯,找到一个父节点 假设为a, a为其父节点的左子树节点 ,那么 a的父节点则是 下一个节点(非常重要!!!)

代码实现

/**
 * 
 */

/***
 * @author 18071
 * @Date 2019年2月19日
 * 功能:给出二叉树,以及一个节点 ,找出其下一个节点 中序遍历
 * 先 左,后 根,再右
 ***/
public class text {
	static TreeNode tnode =new TreeNode ("a");
	public static void main(String args[]) {
		TreeNode left=tnode.addleft("b");
		left.addright("e");
		left.addleft("d");
		left.right.addleft("h");
		
		TreeNode test=left.right.addright("i");
		
		tnode.addright("c");
		  
		
		System.out.println(findnextnode(test).value);
		
	}
	
	
	public static TreeNode findnextnode(TreeNode head) {
		
		TreeNode temp=null;
		//分为 两种大的情况
		
		// 有右子树 ,则下一个节点就是他的右节点
		if(head.right!=null) {
			temp=head.right;
			System.out.println(1);
		}
		
		
		//若无右子树,若其不是其父节点的右子树,则 其父节点就是 其下一个节点
		else if(head.parent!=null&&head.parent.left==head) {
			
			
			
			temp= head.parent;
			System.out.println(2);
		}
		
		///若无右子树,且是其父节点的右子树 则往上回溯,找到一个父节点 假设为a, a为其父节点的左子树节点 ,那么 a的父节点则是 下一个节点
		else {
			
			while(head.parent.parent.left!=head.parent&&head.parent!=null)
			{
				head=head.parent;
				
			}
			
				temp=head.parent.parent;
			
			
			System.out.println(1);
		}
		
		
		
		return temp;
		
	}

}


class TreeNode{
	String  value;
	TreeNode left;
	TreeNode right;
	TreeNode parent;
	
	TreeNode(String x){
		this.value=x;
		parent=null;
		left=null;
		left=null;
	}
	
	public TreeNode addleft(String a){
	  TreeNode t=new TreeNode(a);
	  this.left=t;
	  this.left.parent=this;
	  return left;
	}
	
	public TreeNode addright(String a) {
		TreeNode t =new TreeNode(a);
		this.right=t;
		this.right.parent=this;
		return right;
	}
}

运行结果
要求找到i的下一个节点,应输出 a ,结果正确
在这里插入图片描述
节点e的下一个 节点,应为 i,结果正确
在这里插入图片描述

选择d,结果应为 b,正确在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Hqxcsdn/article/details/87722051