zoukankan      html  css  js  c++  java
  • 二叉树的下一个节点(模拟)

    题目来源:https://www.acwing.com/problem/content/31/

    思路:

    模拟,中序遍历时,本节点的下一个节点分为两种情形讨论

    当本节点存在右子树,直接找右子树的最左节点,即是中序遍历的下一个节点。

    当本节点不存在右子树,则向上寻找最近可作为左儿子的节点(包含该节点)的父亲节点(联想中序遍历的规律,不存在右子树则要往上回溯,寻找最近未访问的根节点),该点为中序遍历的下一个节点,若下一个节点不存在,返回即可。

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode *father;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL), father(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* inorderSuccessor(TreeNode* p) {
            if(p->right==NULL){///右子树为空,往上找点为可作为的左儿子的父亲
                while(p->father&&p!=p->father->left){
                    p=p->father;
                }
                return p->father;
            }
            else{///如果右子树不为空,则找右子树的最左边的点即可
                p=p->right;
                while(p->left!=NULL){
                    p=p->left;
                }
                return p;
            }
        }
    };

     

     

  • 相关阅读:
    mybatis动态sql和分页
    mybatis入门
    IDEA
    Linux环境搭建
    svn
    jwt
    Vuex
    SPA项目开发之CRUD+表单验证
    JavaScript可视化框架——Echarts
    python+selenium六:隐式等待
  • 原文地址:https://www.cnblogs.com/mohari/p/13756934.html
Copyright © 2011-2022 走看看