二叉搜索树与双向链表的优化,设置全局变量指向最后一次遍历的从而连接,省略了循环找到最后的节点进行连接

package niuke;

public class SearchTreenode3 {
    TreeNode lastNode = null;
      public static void main(String[] args) {
        
    }
      
      public TreeNode Convert(TreeNode pRootOfTree) {
          /*输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。*/
          TreeNode left = null;
          TreeNode right = null;
          if(pRootOfTree == null) {      //如果是空节点则返回为空
              return null;
          }
          if(pRootOfTree.left == null && pRootOfTree.right == null) {
              lastNode = pRootOfTree;  
              return lastNode;           //无论是左节点还是右节点,当其为叶子节点时返回
          }
          left = Convert(pRootOfTree.left);    //转换左子树
          if(left != null) {
              lastNode.right = pRootOfTree;      //左子树与中间节点建立连接
              pRootOfTree.left = lastNode;
          }
          lastNode = pRootOfTree;  
          right = Convert(pRootOfTree.right); 
          if(right != null) {
              pRootOfTree.right = right;         //中间节点与右节点建立连接
              right.left = pRootOfTree;
          }
        return left != null ? left:pRootOfTree; //最后返回双向链表的头结点
         
         }
}
 

猜你喜欢

转载自blog.csdn.net/ZWB626/article/details/84259932