<剑指offer 面试题8>二叉树的下一个节点(Java)
2017-12-29 20:56
447 查看
package 剑指offer; public class Inteview8 { /** * 题目:给定一科二叉树和其中一个节点, * 如何找出中序遍历序列的下一个节点? * 书中的节点除了有两个分别指向左右节点的指针, * 还有一个指向父节点的指针 * @param args */ public class BinaryTreeNode{ int val; BinaryTreeNode left; BinaryTreeNode right; BinaryTreeNode parent; public BinaryTreeNode(int val){ this.val=val; this.left=left; this.right=right; this.parent=parent; } } public static BinaryTreeNode nextNode(BinaryTreeNode node){ BinaryTreeNode nextnode = null; if(node==null)return null; //如果该节点的右子树不为空 if(node.right!=null){ nextnode=node.right; while(nextnode.left!=null){ nextnode=nextnode.left; } } //如果该节点的右子树为空 if(node.right==null){ if(node.parent!=null){ //如果该节点是父节点的左子树 if(node.parent.left==node){ System.out.println("该节点是父节点的左子树"); nextnode=node.parent; } //如果该节点是父节点的右子树 else if(node.parent.right==node){ while(node.parent!=null&&node.parent.right==node){ System.out.println("该节点是父节点的右子树"+node.val); node=node.parent; } nextnode=node.parent; } } } return nextnode; } public static void main(String[] args) { // TODO Auto-generated method stub Inteview8 in=new Inteview8(); //创建一棵树 /** * 1 * 2 3 * 4 5 6 7 * 8 9 * */ BinaryTreeNode root=in.new BinaryTreeNode(1); BinaryTreeNode node1=in.new BinaryTreeNode(2); BinaryTreeNode node2=in.new BinaryTreeNode(3); BinaryTreeNode node3=in.new BinaryTreeNode(4); BinaryTreeNode node4=in.new BinaryTreeNode(5); BinaryTreeNode node5=in.new BinaryTreeNode(6); BinaryTreeNode node6=in.new BinaryTreeNode(7); BinaryTreeNode node7=in.new BinaryTreeNode(8); BinaryTreeNode node8=in.new BinaryTreeNode(9); root.left=node1; root.right=node2; root.parent=null; node2.parent=root; node1.parent=root; node1.left=node3; node3.parent=node1; node1.right=node4; node4.parent=node1; node2.left=node5; node5.parent=node2; node2.right=node6; node6.parent=node2; node3.right=node7; node7.parent=node3; node4.right=node8; node8.parent=node4; BinaryTreeNode N1=nextNode(node8); System.out.println(N1.val); BinaryTreeNode N2=nextNode(node4); System.out.println(N2.val); BinaryTreeNode N3=nextNode(node7); System.out.println(N3.val); BinaryTreeNode N4=nextNode(node6); // System.out.println(N4.val); } }
相关文章推荐
- 【剑指offer】面试题8:二叉树的下一个节点
- <剑指offer 面试题7-2>重建二叉树 Java
- <剑指offer 面试题2> 单例模式 (Java实现)
- <剑指offer 面试题6-2>从尾到头打印链表 Java
- <剑指offer 面试题7-1>构建二叉树以及实现遍历 Java
- <剑指offer 面试题9>用两个栈实现队列(Java)
- 【剑指offer】面试题 8:二叉树的下一个节点
- 剑指Offer面试题39(Java版):二叉树的深度
- 剑指offer --- 二叉树的下一个节点
- 【js版】 剑指offer【6】二叉树的下一个节点
- 【剑指offer】二叉树的下一个节点
- 剑指offer 面试题25 二叉树中和为某一值的路径-Java实现
- 剑指offer-二叉树的下一个节点
- 【剑指Offer】面试题58:二叉树的下一个结点
- 剑指offer 58 - 二叉树的下一个节点
- 剑指offer面试题18:删除链表的节点-java
- 剑指offer--面试题23:从上往下打印二叉树--Java实现
- <剑指offer 面试题6-1>单项链表的实现 Java实现
- 剑指Offer面试题61:按之子型打印二叉树 Java实现
- 剑指offer_二叉树的下一个节点