劍指offer 56:二叉樹的下一個節點

題目描述

給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。

思路:

  1. 題目說尋找下一個節點,且是按照中序遍歷的情況下,中序遍歷就是左中右
  2. 那麼我們就要考慮三種情況,第一種就是傳進節點是空的,直接返回空就好了
  3. 第二種傳進來的節點有右孩子,按照中序,那麼節點下一個一定是右孩子子樹中最深最左邊的那個節點,如果右孩子沒孩子下一個節點就是右孩子本身
  4. 第三種就是沒有右孩子了,即都是左孩子的情況,我們要判斷下一個節點的話,就是其父結點,那麼我們可以採用next從父結點循環判斷值相等的時候,返回本身就可以了
/*
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 node)
    {
        if(node==null) return null;
        if(node.right!=null){
            node=node.right;
            while(node.left!=null){
                node=node.left;
            }
            return node;
        }
         while(node.next!=null)
        {
            if(node.next.left==node)return node.next;
            node=node.next;
        }
        return null;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章