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

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; //最后返回双向链表的头结点
         
         }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值