博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指Offer_57_二叉树的下一个结点
阅读量:4680 次
发布时间:2019-06-09

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

题目描述

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

解题思路

我们知道二叉树的中序遍历是先遍历左子树,然后遍历根结点,最后遍历右子树。根据题意,我们需要找到当前节点的下一个需要遍历的结点,首先判断该结点是否存在右子树,如果存在,那么下一个结点一定在其右子树中,且是右子树中第一个没有左孩子的结点(每一个有左孩子的结点,就需要遍历其左子树)。如果结点没有右子树,那么如果该结点是父结点的左孩子,那么下一个结点就是其父结点;如果当前结点是父结点的右孩子,那么继续往上找到父结点的父结点,直到找到一个结点是父结点的左孩子的结点,那么其父结点就是下一个结点,如果一直遍历到根结点也没有找到存在结点是父结点的左孩子的结点,那么当前给定结点是二叉树中序遍历的最后的结点,下一个结点就是null。

实现

/*树结点定义*/public class TreeLinkNode {    int val;    TreeLinkNode left = null;    TreeLinkNode right = null;    TreeLinkNode next = null;    TreeLinkNode(int val) {        this.val = val;    }}/*实现*/public class Solution {    public TreeLinkNode GetNext(TreeLinkNode pNode)    {        if (pNode == null) return null;        TreeLinkNode p;        if (pNode.right != null){            p = pNode.right;            //找到第一个没有左结点的结点            while (p != null && p.left != null){                p = p.left;            }            return p;        }        p = pNode.next;  //指向父结点        while (p != null){            if (pNode == p.left) return p;  //当前结点是父结点的左孩子            //往上找            pNode = p;            p = p.next;        }        return p;    }}

转载于:https://www.cnblogs.com/ggmfengyangdi/p/5814451.html

你可能感兴趣的文章
fastjson转换json时,碰到的那些首字母大小写转换的坑!(转)
查看>>
Python3.6+pyinstaller+Django
查看>>
PowerDesigner使用教程
查看>>
ORACLE安装入门篇OEL5.4安装ORACLE11g
查看>>
聚类算法学习笔记(一)——基础
查看>>
Node.js 调用 restful webservice
查看>>
DirectX11--HR宏关于dxerr库的替代方案
查看>>
NOI 2005 瑰丽华尔兹(三维DP + 单调队列优化)
查看>>
【并查集模板】 【洛谷P2978】 【USACO10JAN】下午茶时间
查看>>
POJ3664
查看>>
一句话介绍python线程、进程和协程
查看>>
App的登录注册相关接口
查看>>
ubuntu普通用户使用wireshark的权限问题
查看>>
Lp空间
查看>>
DirectShow+VS2010+Win7配置说明
查看>>
向web端进行推送
查看>>
Python2.7-copy_reg
查看>>
Vue 上传图片压缩 的问题
查看>>
Map的四种遍历
查看>>
Windows Phone 7 模拟器外观下载——Nokia Lumia 800
查看>>